黑马程序员技术交流社区

标题: 做练习时遇到*q=&a 类型,求分析 [打印本页]

作者: jacob_ios    时间: 2015-10-8 23:10
标题: 做练习时遇到*q=&a 类型,求分析
int a = 1;
int * pointer_to_a = &a;

a += 1;

*pointer_to_a += 1;


printf("The value of a is now %d\n", a);
结果为什么是3,而不是2?pointer_to_a是指向a的指针,可是输出的是a的值,a++了一次,就是2呀
作者: ff774411    时间: 2015-10-9 11:08
因为 int a = 1,所以在:a += 1;
这里结束后 a = 2了
另外由 :int * pointer_to_a = &a;可以知道 pointer_to_a 指向a,
那么*pointer_to_a += 1;这句话的意思  就是  a+=1,
接着上面那句话,那么就是  a = 2 之后 再一次 a+=1;
这句话结束后   a  就等于 3了。
作者: 408205555    时间: 2015-10-9 11:14
pointer_to_a是a的地址,a++完了是2,取出这个地址的值再++,那不就是3了吗
作者: 布鲁兹老爷    时间: 2015-10-9 14:18

int * pointer_to_a = &a;      
定义指针变量指向变量a的地址。

这里可以拆分成     
int *pointer_to_a;
pointer_to_a = &a;

*pointer_to_a 就是 变量a的值。
你修改了这个值当然就是修改了a得值。


作者: ccwinner    时间: 2015-10-9 14:47
楼上正解
作者: wjy0916    时间: 2015-10-9 16:46
全是正解,加油
作者: zhudong100    时间: 2015-10-9 18:13
执行int * pointer_to_a = &a语句后,pointer_to_a表示指向a的指针。*pointer_to_a 表示指针pointer_to_a指向a的值,*pointer_to_a += 1相当于a=a+1,所以结果为3。
作者: 313919810    时间: 2015-10-9 18:23
a += 1;
*pointer_to_a += 1;

以上两句都能表示a=a+1;
第一句是通过变量实现的
第二句是通过指针实现的。
加了两次,所以a=3
作者: Brisingr    时间: 2015-10-9 20:37
对的大家说的
作者: Ahcn    时间: 2015-10-9 21:30
虽然是指针,但是通过*pointer_to_a += 1,也就是通过指针修改了a的值,所以又加了1
作者: 啦啦啦啦你    时间: 2015-10-9 21:35
楼上全是正解
作者: 18120184391    时间: 2015-10-9 21:38
指针p=&a;
*p等效于a;

作者: wxd123    时间: 2015-10-9 21:38
指针也可以改值的
作者: jacob_ios    时间: 2015-10-9 22:13
ff774411 发表于 2015-10-9 11:08
因为 int a = 1,所以在:a += 1;
这里结束后 a = 2了
另外由 :int * pointer_to_a = &a; 可以知道 pointe ...

谢谢解答
作者: jacob_ios    时间: 2015-10-9 22:14
408205555 发表于 2015-10-9 11:14
pointer_to_a是a的地址,a++完了是2,取出这个地址的值再++,那不就是3了吗

嗯,似乎懂了,感谢感谢
作者: gaozp    时间: 2015-10-10 09:37
这也就是指针的应用了;
作者: gaozp    时间: 2015-10-10 09:46
点错了,回复得太快了。还没说完呢。pointer_to_a是指向的是a的指针。所以呢,*pointer_to_a就代表a的值,自己使用另一种形式代表 。所以,当a+=1时,a=2了已经。下一条指令*pointer_to_a+=1;又代表a再次+1,所以最后结果为3
作者: wwf707542865    时间: 2015-10-11 01:38
楼上所以分析都很有理
作者: jacob_ios    时间: 2015-10-11 10:24
zhudong100 发表于 2015-10-9 18:13
执行int * pointer_to_a = &a语句后,pointer_to_a表示指向a的指针。*pointer_to_a 表示指针pointer_to_a指 ...

嗯嗯,谢谢啦
作者: LPz1994    时间: 2015-10-11 20:14
新人来围观。。。
作者: 杰杰    时间: 2015-10-11 21:17
指针指向的是地址,变量做运算,地址不变,取的就是那个地址里的值。a+1放在了a里,那么a=2,取出2做++,则等于3
作者: 睡觉就有梦想    时间: 2015-10-11 23:29
楼上正解
作者: chingwei2011    时间: 2015-10-12 00:17
a++之后 变为2,而pointer_to_a指向a ,代码最后一行*pointer_to_a又自加一次,并将*pointer_to_a指向的地址的值改为3,所以就是3了。
作者: 谁在放荡    时间: 2015-10-18 17:08
布鲁兹老爷 发表于 2015-10-9 14:18
int * pointer_to_a = &a;      
定义指针变量指向变量a的地址。

pointer_to_a = &a;

*pointer_to_a 就是 变量a的值
以上这应该是不对的,指针即地址。所以   *pointer_to_a = &a;才是正确的,pointer_to_a才对应的是变量a的值
作者: 布鲁兹老爷    时间: 2015-10-18 17:55
谁在放荡 发表于 2015-10-18 17:08
pointer_to_a = &a;

*pointer_to_a 就是 变量a的值

你重新学一下指针吧。。。
作者: 谁在放荡    时间: 2015-10-18 18:30
布鲁兹老爷 发表于 2015-10-18 17:55
你重新学一下指针吧。。。

又看了下,确实理解错了,丢人了{:2_34:}




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