下面程序段的输出结果是3#1#4,求详细解释
int x,y=1;
int func( int *x, int y, int *z )
{
(*x)++; y += 2; *z = *x+y;
return y;
}
void main()
{
int z;
x = func(&x, y, &z);
printf("%d#%d#%d", x, y, z);
}
原因就是指针参数可以修改指向变量的值,而值参y不行。
对于x,由于并没有初始化,所以函数内 ( * x)++后,x的值按说应该是个不确定的值,没有意义。所以x值主要是看func函数的返回值,会传递给x。返回值为y,而y在函数中增加了2,而传入函数的y是个全局变量,初始值为1,所以返回值是3。由于y使用值参传递,所以函数中的y与全局变量y是不同的变量,函数中修改的是函数内的局部变量y的值,不是全局变量,因此全局变量没有改变,还是1。
对于z的值,有疑问,因为x并没有初始化,所以z的值为*x + y也是不可靠的,但题目的意思可能认为x自动初始化为0,所以( *x)++后x为1,y+=2后y是3,最终z的值是4