首页 > 编程语言 > 详细

数组和指针的虐恋

时间:2014-12-24 19:58:38      阅读:137      评论:0      收藏:0      [点我收藏+]

先看代码:

 1 #include <stdio.h>
 2 
 3 int main(void)
 4 {
 5     int i=99;
 6     int *p = &i;
 7     p[0] = 88; 8     printf("What‘s in it? %d\n", p[0]);
 9     printf("What‘s ‘i‘ now? %d\n", i);
10     return 0;
11 }

再看结果:
What‘s in it? 88
What‘s ‘i‘ now? 88
也就是说,把指针p指向i的内存地址后,p的行为可以表现得像数组一样。

给p[0] 赋值就是给那个地址及其后面三个连续的内存单元存上一个数字88,

因为int类型占4个字节,而一个内存单元对应一个字节。

而i的值也是同样的地址,即p[0]对应的地址,所以i的值被改写了。

如果赋值的是p[1],那么i的值不会有任何变化。但是实际上给p[1]赋值会返回段错误。

*估计是那个内存地址不允许写入吧。但是编译器不会发现这个错误。

数组和指针的虐恋

原文:http://www.cnblogs.com/omnipotent/p/4183003.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!