C语言大虾一定来2

来源:百度知道 编辑:UC知道 时间:2024/05/28 14:54:08
/***c程序1***/
int *fun(int n)
{ return &n; }
main()
{ int x=10,*p;
p=fun(x);x=20;
printf("%d,%d\n",x,*p);
getch();
}
/***程序2***/
int *fun(int n)
{ return &n; }
main()
{ int x=10,*p;
p=fun(x);x=20;
printf("%d,%d\n",*p,x);
getch();
}
这两个程序为什么输出顺序不同 结果不同?

差别就在于这两条语句:
printf("%d,%d\n",*p,x);
printf("%d,%d\n",x,*p);

printf("%d,%d\n",x,*p); 是先输出X的值,然后运行fun函数,因为p 是指向一个函数,是一个接口.

printf("%d,%d\n",*p,x);是先运行函数fun,然后输出X.
所以:先运行fun跟后运行fun的结果就不同了!

函数调用后,*p值为10.
x因重新赋值,所以x值20.而printf打印顺序不一样,所以结果程序1为20,10
程序2结果为:10,20.