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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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呀

25 个回复

倒序浏览
因为 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了。
回复 使用道具 举报 1 0
pointer_to_a是a的地址,a++完了是2,取出这个地址的值再++,那不就是3了吗
回复 使用道具 举报 1 0

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

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

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

回复 使用道具 举报 1 0
楼上正解
回复 使用道具 举报
全是正解,加油
回复 使用道具 举报
执行int * pointer_to_a = &a语句后,pointer_to_a表示指向a的指针。*pointer_to_a 表示指针pointer_to_a指向a的值,*pointer_to_a += 1相当于a=a+1,所以结果为3。
回复 使用道具 举报
a += 1;
*pointer_to_a += 1;

以上两句都能表示a=a+1;
第一句是通过变量实现的
第二句是通过指针实现的。
加了两次,所以a=3
回复 使用道具 举报 1 0
对的大家说的
回复 使用道具 举报
Ahcn 中级黑马 2015-10-9 21:30:37
10#
虽然是指针,但是通过*pointer_to_a += 1,也就是通过指针修改了a的值,所以又加了1
回复 使用道具 举报
楼上全是正解
回复 使用道具 举报
指针p=&a;
*p等效于a;
回复 使用道具 举报
指针也可以改值的
回复 使用道具 举报
ff774411 发表于 2015-10-9 11:08
因为 int a = 1,所以在:a += 1;
这里结束后 a = 2了
另外由 :int * pointer_to_a = &a; 可以知道 pointe ...

谢谢解答
回复 使用道具 举报
408205555 发表于 2015-10-9 11:14
pointer_to_a是a的地址,a++完了是2,取出这个地址的值再++,那不就是3了吗

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

嗯嗯,谢谢啦
回复 使用道具 举报
新人来围观。。。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马