下列程序的运行结果是( )。 void fun(int*a,int*b) { int *k; k=a; a=b; b=k; } main() { int a=3,b=6,*x=&a,*y=&b;

admin2013-06-11  23

问题 下列程序的运行结果是(  )。    void fun(int*a,int*b)    {    int *k;    k=a;  a=b;  b=k;    }    main()    {    int a=3,b=6,*x=&a,*y=&b;    fun(x,y);    printf("%d%d",a,b);    }

选项 A、63
B、36
C、编译出错
D、0 0

答案2

解析 在C语言中,调用函数时是将实参复制一份给形参,所以无论怎么改变形参的值,都不会影响到实参,即传值调用。即使形参是指针变量,也没有改变C语言传值调用这个事实,实参指针也还是复制了一份给形参指针,无论怎么改变形参指针的内容(注意:不是形参指针所指向的内容),也不会影响实参指针的内容。但它们两个现在的值一样,即指向的是同一个内存地址,所以改变形参指针所指向的内容,也就改变了实参指针所指向的内容,C语言就是这样实现传址调用的。本题中fun()函数的形参就是两个指针,但函数中没有任何语句改变这两个指针所指向的内容,只是交换了两个参数的内容,所以该函数不会对传递给它的实参以及实参所指向的内容造成任何影响,故a,b初始化时为3,6,输出结果亦为3和6。应该选择B。
转载请注明原文地址:https://kaotiyun.com/show/QCJp777K
0

最新回复(0)