crazyjixiangcrzybaby.blog.chinaunix.net
crazyjixiang
全部博文(19)
emacs(0)
vim(0)
2011年(1)
2009年(18)
wxudong1
分类: C/C++
2009-11-26 10:06:30
#include <iostream>using namespace std; struct S { int i; int *p; }; int main() { S s; int *p=&s.i; p[0]=4; p[1]=3; s.p=p; s.p[1]=1; s.p[0]=2; }
详细的解释:
struct S { int i; int *p; }; main() { S s; //定义一个结构叫s int *p=&s.i; //定义一个指针,指向s.i 地址 p[0]=4; //设置p[0]等于4,就等于设置s.i=4 p[1]=3; //设置p[1]等于3,就等于设置s.p=3, 指针等于3,是一个非法指针 // 像上面这样操作地址很危险,初学者不易效仿。 // 应该用s.i=4, s.p=xxx 来赋值 s.p=p; //重设s.p 为p 地址, s.p 目前为合法地址 //注意,s.p目前直到了s 地址上,即指到了自己的头顶上。 //所以有s.p[0] 就是 s.i, s.p[1]就是s.p //这是鸟考官故意设的圈套,初学者也不易效仿。 世界之大,非指到自己头上干什么 //想找麻烦吧。 s.p[1]=1; // 这一项,把s.p的内容给改掉了。变成了1,很可恶。 s.p[0]=2; // s.p 已经出错了,再来操作s.p(向s.p所指空间读写数据)就会异常了。 system("pause"); return 0; }
上一篇:一段不错的代码,分享下
下一篇:ubuntu访问windows共享文件
登录 注册