c语言的一编程题

来源:百度知道 编辑:UC知道 时间:2024/05/18 09:10:49
void fun(int *x, int *y)
{
printf("%d %d", *x, *y);
*x=3; *y=4;
}
void main()
{
int x=1,y=2;
fun(&y,&x);
printf(" %d %d",x, y);
}
turbo2.0运行结果 2 1 4 3
看不懂这个程序。我理解第一部分是输出x,y的地址的值,就应该是3 4,
第二部分是交换x,y的值,应该是2,1。
怎么出来答案这个结果?
第一部分怎是先printf,而后才是*x=3,*y=4。应该颠倒一下才对吧?

sorry,错了.是C中的传址.
在函数中输出的是主函数中的(y,x)也就是(2,1);
然后*x=3,*y=4;回到主函数时,x=4,y=3;输出的就是(4,3)了;你仔细看参数,不要弄反了.
----------------------------------------
你弄错了,当执行fun(&y,&x)时,就进入子函数了,执行函数里面的printf(*x,*y);而后子函数返回后再执行printf(" %d %d",x, y);

#include<stdio.h>
void fun(int *p, int *q)
{
printf("%d %d",*p,*q);
*p=3; *q=4;
}
void main()
{
int x=1,y=2;
fun(&y,&x);
printf(" %d %d",x,y);
}
首先取y的地址给p,x的地址给q,使得p指针指向的值是2,q指向1
这样打印*p,*q也就是 2 1
接下来p指针指向的值改变成3,q改变为4
相应的由于y,x的地址所指向的值发成改变,所以y改变为3,x改变为4
打印出4,3