#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了吧
下面是整个的图,给你贴出来
- 1 回答
- 0 关注
- 425 浏览
添加回答
举报
0/150
提交
取消