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%
帮助的人:25.2万
展开全部

因为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;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
时空魔法
2017-12-22 · TA获得超过249个赞
知道小有建树答主
回答量:424
采纳率:50%
帮助的人:78.6万
展开全部
x y z是局部指针 修改这三个值存储的地址 不会影响 abc的存储的地址
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
我行我素的兔子
2013-09-12 · 知道合伙人互联网行家
我行我素的兔子
知道合伙人互联网行家
采纳数:653 获赞数:2095
15年在IT领域耕耘,软件系统管理经验、硬件设备知识丰富。

向TA提问 私信TA
展开全部
prt函数没有返回值,而主程序中a、b、c的值是不变的,调用prt函数多少遍结果都是一样的。
追问
AB值变了 你可以运行下。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式