阅读下列程序,给出运行结果。 #include“stdio.h” #include“string.h” int*P; main( ) (int x=1,y=2,z=3: p=&y; fun(x+z,&y); printf(“(1)%d%d%d\n”

admin2014-10-20  53

问题 阅读下列程序,给出运行结果。
#include“stdio.h”
#include“string.h”
int*P;
main(    )
(int x=1,y=2,z=3:
p=&y;
fun(x+z,&y);
printf(“(1)%d%d%d\n”,x,y,*p);
}
fun(int x,int*y)
{int z=4:
*p=*y+z:
x=*P—z:
print”(2)%d%d Gdkn”,x,*y,*p);
}

选项

答案(1)1 ; 6; 6(2)2;6;6

解析 第一步:调用fun函数之前,进行了如图所示的操作:全局变量p指向main函数中的局部变量y。

第二步:当发生函数调用时,实参向形参传递。这时,新开辟了整型变量x和指向main中的变量y的指针y,显然,它和全局变量p一样指向了同一个单元。fun函数中的x,y和main中的x,y是两个不同的变量,x、y代替fun中的x,y。
第三步:执行’fun函数。按顺序先进行两个赋值运算:(1)*p=*y’+z’;(2)x’=*p—z’;这时候,没有改变p的指向,而是改变了p所指向变量y(main中的变量y)的数值,即“*p=*yf+z’;”等价于“y=y+z’;”,故main中的变量y等于6;同时,因为*p的值改变,fun函数的形参x’的值因执行“x’=*p—z’;”语句而变为2。然后接着执行一个打印输出语句”printf(“(2)%d%d%d\n”,x’,*y’,*p);”,所以,该步的输出结果应为:(2)2 6 6第四步:函数调用结束,返回主调函数。被调用函数中的形参都消失,当然各种指向也消失。输出结果应该为:(1)1 6 6
转载请注明原文地址:https://kaotiyun.com/show/IlvR777K
0

最新回复(0)