求下列程序的运行结果

来源:百度知道 编辑:UC知道 时间:2024/06/27 13:44:17
#include <stdio.h>
void prt(int *x,int *y,int *z)
{ printf("%d,%d,%d\n",++*x,++*y,*(z++));}
int a=10,b=40,c=20;
main()
{ prt(&a,&b&c);
prt(&a,&b, &c);
}
恩,失误,应该有逗号,原程序如下:
#include <stdio.h>
void prt(int *x,int *y,int *z)
{ printf("%d,%d,%d\n",++*x,++*y,*(z++));}
int a=10,b=40,c=20;
main()
{ prt(&a,&b,&c);
prt(&a,&b, &c);
}
最后输出的c为什么还是20?不是z指向了下一个地址了吗?
z指向的地址改变了,那输出的不是z指向的下一个地址的值嘛?

程序报错,prt(&a,&b&c); 少了个逗号pr(&a,&b,&c);
答案是11,41,20
12,42,20
那你要问为什么C还是20,那我们看一下程序:
",++*x,++*y,*(z++));} 单单看*(z++)这个两次的运行顺序我写一下:
1.输出*z因为z++是先运行Z然后再运行z++的
2.z++是什么意思,不是20加1,因为这个z不是*z,它的自加不会影响到20这个数,只是它指向的地址加1,如果原来它指向的地址是100的话,那么现在就是101,所以到第二次输出是还是20,因为20没有被改变,而且每一次运行这个函数的时候,z的赋值就会被重置,而不是原来后面的那个地址了,所以还是20的地址,输出当然是20.不知道你懂了没有!
如果懂了的话,就赏我面小旗玩玩吧!
继续,我不是说过每次运行prt这个函数,z的赋值就会被重置吗,就是说没一次运行prt这个函数,z的值就会被赋予20这个数的地址,而结束这个函数后,z的值会消失,所以到下一次运行的时候还是20这个数的地址,现在知道了吗?

11,41,20
12,42,20