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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 董月峰 高级黑马   /  2014-3-1 10:12  /  2573 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

int a=2;
int *p=&a;意思是指针p取a的地址
然后要改变a的值
直接*p=3;  相当于a=3;
疑问:*p不是=&a么,为啥做a=3的操作的时候直接用*p=3?这不是&a=3的意思?
【个人理解,如果a=2,&a原来的阿斯科马=ffa2,那*p=ffa2,要改a的值成3,设3的阿斯科马是ffa3,不应该是*p=ffa3么?然后&a变成ffa3,a=3】
请大神指出我的思维误区

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

6 个回复

倒序浏览
&符号是取地址符!&a这个指的的存放a这个变量的地址,&a=3是不行的!*p=&a这句话后!*p就等同于 a,但是!不等同于&a!&a现在等同于指针变量p了!明白吗?p是个指针,*p代表p这个指针指向的内存中存放的数据!你仔细去看看指针这一节的视频吧!

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
还有·我觉得你没有理解int *p=&a;这句话的意思!这句话可以看成两步!
1、int *p;定义一个int型指针变量p
2、p=&a;
-----------------------------------------------
回复 使用道具 举报
int *p=&a;这句话的意思是定义一个int类型指针,然后用a的地址给p赋值;
*p就是指针p所指向的内存空间存储的值,*p=a就是把p所指向的那一内存空间的值赋值为a,p本身不改变
回复 使用道具 举报
C语言里这个‘*’有两种作用:
1.*作为标志符,表明某个变量是一个指针变量。或者某个函数的返回值是指针类型。或者声明一个函数指针。
例:int *p;
      int *add(int a, int b);
      int (* add)(int a, int b);
2. *作为运算符使用。是一个间接运算符。作用是取出指针变量所对应的地址空间中的变量值。
例: a = *p;
       *p++;
我看很多书和老师也不讲明这一点。开始学的时候表示很无语。
所以,这里。int *p = &a; 首先,声明p是一个指针变量。这里*是表明p是一个指针变量,而不是作为运算符使用。p存放的数据类型是int,而且代表的内容是一个地址。因此,这里可以将a的地址赋值给p(&是取地址运算符)。而不是将a的值赋值给p。而下面*p = 3; 这里的*是作为一个运算符。表示取出指针变量p所存放的地址(即a的内存地址)所对应的实际内容(即a)。然后将3赋值给它。即相当于 a = 3

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 小、小罗 于 2014-3-1 17:18 编辑

语句int  *p=&a;你应该把它看成是(int *)  p,而不是int  (*p),意思是定义了一个指针变量p,而且指针变量p指向a,只有定义了指针变量,才能用语句*P=3;意思是把p指向的内容重新赋值为3。这样说能理解不?
回复 使用道具 举报
p 对应的是地址 ,*p 对应的是地址内的值
&a 对应的是地址 ,a 对应的是地址内的值
所以 p与 &a是对应的
*p 与 a 是对应的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马