猿问

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

#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);
}

慕运维8079593
浏览 426回答 1
1回答

慕虎7371278

以上的程序和你的代码完全等价,设置四个断点并调试,我称前三个断点为1,2,3,如图。print函数接受三个参数,三个整形指针。在print(&a,&b,&c)这句话中分别传入了a,b,c变量的地址,也就是指向a,b,c三个整型变量的指针。进而在print函数当中第一个断点:&nbsp;cout&nbsp;<<&nbsp;++*x<<',';&nbsp; 这句话中&nbsp;++*x&nbsp;的优先级是&nbsp;*&nbsp;高于&nbsp;++&nbsp;也就是&nbsp;++(*x)那么,x所指的变量自增,所以x所指的变量变成了2。由于传入的是指针,那么内存当中的数值也就变了,也就是说,main函数中a的值已经变为了2.第二个断点&nbsp;cout&nbsp;<<&nbsp;++*y<<',';&nbsp;这句话与第一个类似,不解释了第三个断点&nbsp;cout&nbsp;<<&nbsp;*(z++)<<endl;&nbsp;这句话得好好说说这句话的意思是&nbsp;先将指针z所指的变量取出并打印到屏幕上,然后再对z进行自增。注意:此处z++,++自增符号在z的后方,说明是先取出z之后再对其进行自增操作。不要被括号所蒙蔽,认为是先自增之后再取出变量了。而由于指针z的自增对z所指的变量没有任何影响,所以c的值还是2,并没有任何变化,不像a和b,他们的值已经发生了变化。我已经完整解释了第一个print函数的过程,你应该也明白第二个print了吧下面是整个的图,给你贴出来
随时随地看视频慕课网APP
我要回答