C语言程序问题,求详细解释,谢谢!

void prt(int *x ,int *y, int *z)
{
printf("%d%d%d\n",++*x,++*y,*(z++));}
main()
{
int a=10, b=40, c=20;
prt(&a&b&c);
prt(&a&b&c);}

主要就是Z的值不理解,Z++是地址变化吧,但是是在*执行完,才改变地址吧?还有为什么两次数值都不变?

因为prt函数的参数是&c(c的地址), &c就是prt函数的局部变量,它的值在prt函数里改变,main函数中不会改变。c的值是20是因为++的特性,语句结束之后再加1.

把*(z++),换成z++,直接查看z的地址变化,就很容易理解了。把代码发给你,你自己实验下。

#include <stdio.h>
void prt(int *x ,int *y, int *z)
{
printf("调用prt:\n");
printf("%d,%d,c的地址:%d\n",++*x,++*y,z++);//z++:第一次z不变
printf("%d,%d,c的地址:%d\n",++*x,++*y,z++);//z++:第2次z+1
}

int main()
{
int a=10, b=40, c=20;
prt(&a,&b,&c);
prt(&a,&b,&c);

return 0;
}

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-09-12
prt函数没有返回值,而主程序中a、b、c的值是不变的,调用prt函数多少遍结果都是一样的。追问

AB值变了 你可以运行下。

第2个回答  推荐于2017-12-23
函数内执行完z++后,是z的地址变了,而不是z指向的值即c的值变了,当返回到主函数后,z对应的一段存储空间就被系统收回了,再一次调用函数后,是一个新的指针z指向了c,从而z的值不改变本回答被网友采纳
第3个回答  2013-09-12
#include<stdio.h>
void prt(int *x ,int *y, int *z)
{
printf("%d%d%d\n",++*x,++*y,*(z++));
printf("%d%d%d\n",++*x,++*y,*(z++));
}
main()
{
int a=10, b=40, c=20;
prt(&a,&b,&c);
prt(&a,&b,&c);
getchar();
}

这样就变了,原因是:
你用的传址,++*x 将该地址实际数据改变了 *x=*x+1,而 *(z++) 只是改变地址增加,数值并不变,你两次调用都是C的地址,一样本回答被提问者采纳
第4个回答  2017-12-22
x y z是局部指针 修改这三个值存储的地址 不会影响 abc的存储的地址
相似回答