黑马程序员技术交流社区

标题: 指针问题eg. int *p=&a [打印本页]

作者: 董月峰    时间: 2014-3-1 10:12
标题: 指针问题eg. int *p=&a
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】
请大神指出我的思维误区
作者: 脸皮猴    时间: 2014-3-1 10:18
&符号是取地址符!&a这个指的的存放a这个变量的地址,&a=3是不行的!*p=&a这句话后!*p就等同于 a,但是!不等同于&a!&a现在等同于指针变量p了!明白吗?p是个指针,*p代表p这个指针指向的内存中存放的数据!你仔细去看看指针这一节的视频吧!
作者: 脸皮猴    时间: 2014-3-1 10:23
还有·我觉得你没有理解int *p=&a;这句话的意思!这句话可以看成两步!
1、int *p;定义一个int型指针变量p
2、p=&a;
-----------------------------------------------

作者: 董月峰    时间: 2014-3-1 10:34
int *p=&a;这句话的意思是定义一个int类型指针,然后用a的地址给p赋值;
*p就是指针p所指向的内存空间存储的值,*p=a就是把p所指向的那一内存空间的值赋值为a,p本身不改变

作者: conpgy    时间: 2014-3-1 12:01
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
作者: 小、小罗    时间: 2014-3-1 17:13
本帖最后由 小、小罗 于 2014-3-1 17:18 编辑

语句int  *p=&a;你应该把它看成是(int *)  p,而不是int  (*p),意思是定义了一个指针变量p,而且指针变量p指向a,只有定义了指针变量,才能用语句*P=3;意思是把p指向的内容重新赋值为3。这样说能理解不?
作者: 桑托尔    时间: 2014-4-23 09:31
p 对应的是地址 ,*p 对应的是地址内的值
&a 对应的是地址 ,a 对应的是地址内的值
所以 p与 &a是对应的
*p 与 a 是对应的。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2