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啊···

参数进栈的顺序是从右向左啊··
我学的时候我们讲师跟我们说过的啊··
只是现在我也记得不是很清楚了哦··