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

voidprt(int*x,int*y,int*z){printf("%d%d%d\n",++*x,++*y,*(z++));}main(){inta=10,b=40,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++是地址变化吧,但是是在*执行完,才改变地址吧?还有为什么两次数值都不变?
展开
 我来答
鸿子92
2017-12-23 · TA获得超过516个赞
知道小有建树答主
回答量:148
采纳率:86%
帮助的人:24.5万
展开全部

因为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;
}
我行我素的兔子
2013-09-12 · 知道合伙人互联网行家
我行我素的兔子
知道合伙人互联网行家
采纳数:653 获赞数:2095
15年在IT领域耕耘,软件系统管理经验、硬件设备知识丰富。

向TA提问 私信TA
展开全部
prt函数没有返回值,而主程序中a、b、c的值是不变的,调用prt函数多少遍结果都是一样的。
追问
AB值变了 你可以运行下。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
自由的风的我
推荐于2017-12-23 · TA获得超过141个赞
知道答主
回答量:54
采纳率:70%
帮助的人:27万
展开全部
函数内执行完z++后,是z的地址变了,而不是z指向的值即c的值变了,当返回到主函数后,z对应的一段存储空间就被系统收回了,再一次调用函数后,是一个新的指针z指向了c,从而z的值不改变
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
redlover68
2013-09-12 · TA获得超过154个赞
知道小有建树答主
回答量:125
采纳率:0%
帮助的人:56.4万
展开全部
#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的地址,一样
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
时空魔法
2017-12-22 · TA获得超过249个赞
知道小有建树答主
回答量:424
采纳率:50%
帮助的人:76.3万
展开全部
x y z是局部指针 修改这三个值存储的地址 不会影响 abc的存储的地址
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式