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++是地址变化吧,但是是在*执行完,才改变地址吧?还有为什么两次数值都不变? 展开
{
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++是地址变化吧,但是是在*执行完,才改变地址吧?还有为什么两次数值都不变? 展开
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 · 知道合伙人互联网行家
关注
展开全部
prt函数没有返回值,而主程序中a、b、c的值是不变的,调用prt函数多少遍结果都是一样的。
追问
AB值变了 你可以运行下。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
函数内执行完z++后,是z的地址变了,而不是z指向的值即c的值变了,当返回到主函数后,z对应的一段存储空间就被系统收回了,再一次调用函数后,是一个新的指针z指向了c,从而z的值不改变
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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的地址,一样
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的地址,一样
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
x y z是局部指针 修改这三个值存储的地址 不会影响 abc的存储的地址
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询