为了账号安全,请及时绑定邮箱和手机立即绑定

结果为什么会出错?#include<iostream.h>

结果为什么会出错?#include<iostream.h>

慕运维8079593 2021-12-08 23:19:48
#include<iostream.h>void print(int *x,int *y,int *z){ cout<<++*x<<','<<++*y<<','<<*(z++)<<endl;}void main(){int a=1,c=2,b=4;print(&a,&b,&c);print(&a,&b,&c);}
查看完整描述

1 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

以上的程序和你的代码完全等价,设置四个断点并调试,我称前三个断点为1,2,3,如图。


print函数接受三个参数,三个整形指针。在print(&a,&b,&c)这句话中分别传入了a,b,c变量的地址,也就是指向a,b,c三个整型变量的指针。


进而在print函数当中

第一个断点: cout << ++*x<<',';  这句话中 ++*x 的优先级是 * 高于 ++ 也就是 ++(*x)

那么,x所指的变量自增,所以x所指的变量变成了2。由于传入的是指针,那么内存当中的数值也就变了,也就是说,main函数中a的值已经变为了2.

第二个断点 cout << ++*y<<','; 这句话与第一个类似,不解释了

第三个断点 cout << *(z++)<<endl; 

这句话得好好说说

这句话的意思是 先将指针z所指的变量取出并打印到屏幕上,然后再对z进行自增。注意:此处z++,++自增符号在z的后方,说明是先取出z之后再对其进行自增操作。不要被括号所蒙蔽,认为是先自增之后再取出变量了。而由于指针z的自增对z所指的变量没有任何影响,所以c的值还是2,并没有任何变化,不像a和b,他们的值已经发生了变化。


我已经完整解释了第一个print函数的过程,你应该也明白第二个print了吧

下面是整个的图,给你贴出来




查看完整回答
反对 回复 2021-12-12
  • 1 回答
  • 0 关注
  • 425 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信