请问:关于指针
时间:2010-09-11
来源:互联网
struct S{
int i;
int *p;
};
int main(void)
{
struct S s;
int *p = &s.i;
p[0] = 4; -------------1
p[1] = 3; --------------2
s.p = p;
s.p[1] = 1; ------------3
s.p[0] = 2; -------------4
}
第3步是将指针要指的地址赋成了1,可以理解。
程序在第4步会core掉,为什么?第4步为什么不是给结构体的i 赋值啊?
作者: spxjtu 发布时间: 2010-09-11
我总是记不住是应该用“.”还是用“->”,
你用调试器看一下很容易就搞定了。
作者: fender0107401 发布时间: 2010-09-11
不是语法错误啊,是第4步引用了无效的内存。3,4步交换一下程序就就没事了。
作者: spxjtu 发布时间: 2010-09-11
作者: gtv 发布时间: 2010-09-11
书上看的微软面试题。恶心完了能否帮忙解释一下?多谢了。
作者: spxjtu 发布时间: 2010-09-11
你的第二步第三步都等同于把指针值赋成了0x0000002/3 指向了保护区地址 肯定蹦掉 去掉2,3运行正常
win7下gcc测试
- int main()
- {
- struct S s;
- int a = 5;
- printf("a init addr is %p\n",&a);
- printf("s addr is %p\n",&s);
- int *p = &s.i;
- printf("p is %p\n",p);
- p[0] = 4;
- printf("s.i is %d\n",s.i);
- // p[1] = &a;
- s.p = p;
-
- s.p[1] = &a ;
- s.p[0] = 2;
- printf("s.i is %d\n",s.i);
- printf("s.p is %p\n",s.p);
- }
作者: gtv 发布时间: 2010-09-11
2,3步把指针自己的值写成了3和1应该没问题吧,因为没有执行取值。我这边是第4步蹦了,2,3步正常。
作者: spxjtu 发布时间: 2010-09-11
作者: gtv 发布时间: 2010-09-11
作者: zhangsuozhu 发布时间: 2010-09-11
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28