C程序选择题一道,选什么,为什么?
来源:百度知道 编辑:UC知道 时间:2024/07/08 20:54:34
#include"stdio.h"
void fun(int *x,int *y);
{
printf("%d%d",*x,*y);
*x=3;
*y=4;
}
main()
{ int x=1,y=2;
fun(&x,&y);
printf("%d%d",x,y);
}
A.2143 B.1212 C.1234 D.2112
答案给的是A,没给解释
并且,上机 TURBOC 验证亦选A
同样谢谢大家了,我把题打错了
程序第2行改成void fun(int *x,int *y) 去掉分号
程序倒数第3行改成fun(&y,&x);
答案应该是C
本程序的函数参数传递方式是传址方式,
也就是说是将main函数中的变量x,y的地址传递给fun(),
所以fun()中对于*x,*y的赋值,实际上就是直接改变的所传入的地址内所存储的值,
也就是main函数中的变量x,y的值
在fun()中,
先进行一次*x,*y的值的输出(printf("%d%d",*x,*y)),此时输出的就是main函数中的变量x,y的初始值,所以输出:12
随后,在fun()中,进行了对于*x,*y的赋值,
由于是传址方式,所以也就是对于main函数中的变量x,y进行赋值,
所以在main函数中,最后进行x,y的值的输出时,
输出的是:34
所以最后输出的是:1234
选择C
补充一点:
void fun(int *x,int *y);
这个需要改为:
void fun(int *x,int *y)//将分号去掉
要不然编译会出错
C 1234
fun (&y, &x);传入main中y和x的地址,进入fun(int *,int *)以后,参数x获得main中 y 的地址,y获得main中 x的地址
则fun中的*x *y分别指向的是main()中的y 和 x,而在fun中给*x赋值其实就是给main中y赋值
故得出以上结果
void fun(int *x,int *y); 逗号不用写如果函数体在主函数后面要加逗号.
C 正确,fun(int *x,int *y)是地址传递改变x,y的值,变量传递不改变值
我觉得选C,答案错了哦?
你不会把题给错了吧?一二位一定是12
应该是选A啊···
参数进栈的顺序是从右向左啊··
我学的时候我们讲师跟我们说过的啊··
只是现在我也记得不是很清楚了哦··