A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Abuzzworld 中级黑马   /  2015-10-4 23:10  /  1420 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. const int a = 5;
  2.         int *p;
  3.         p = (int *)(&a);
  4.         *p = 3;
  5.         printf("a %p, = %d\n",&a,a);
  6.         printf("p %p, = %d\n",p,*p);
复制代码
  1. a 0x7fff5fbff7cc, = 5
  2. p 0x7fff5fbff7cc, = 3
  3. Program ended with exit code: 0
复制代码

请问到底该怎么理解 我把a地址里的内容修改了,但是a的内容并没有改变呢

8 个回复

倒序浏览
内存的地址不是唯一的吗?编号:0x7fff5fbff7cc 的内存只有一块吧,该怎么解释我用其他方式获得这个地址并修改这个地址所存储的内容,结果就没有变化呢。
回复 使用道具 举报
????????????????????
回复 使用道具 举报
等高手回答,不过感觉,      p = (int *)(&a);好像有问题, 先取地址,已经变为地址了,干嘛还要强转化
回复 使用道具 举报
要是把const定义在全局变量区,就执行不了了,但是不知道为什么在局部变量区可以
回复 使用道具 举报
这是已知的bug,底层做了优化,
回复 使用道具 举报
杰杰 中级黑马 2015-10-5 19:55:29
7#
这个BUG视频里说过,  知道就行了。
回复 使用道具 举报
const int a=5;表示不管后面对a怎么操作,其地址和存储的值都不会改变,而p=(int *)(&a);是把a的地址给p,后面改变的是p所指向地址值的变化为3,听懂了吗??
回复 使用道具 举报
等大神评论
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马