首页 > 代码库 > 数组和指针的虐恋
数组和指针的虐恋
先看代码:
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]赋值会返回段错误。
*估计是那个内存地址不允许写入吧。但是编译器不会发现这个错误。
数组和指针的虐恋
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。