帮忙一道C语言题!.

来源:百度知道 编辑:UC知道 时间:2024/06/17 15:43:23
(28) 有如下程序
void f(int x,int y)
{ int t;
if(x<y){ t=x; x=y; y=t; }
}
main()
{ int a=4,b=3,c=5;
f(a,b); f(a,c); f(b,c);
printf("%d,%d,%d\n",a,b,c);
}
执行后输出结果是
A) 3,4,5 B) 5,3,4 C) 5,4,3 D) 4,3,5
详细

答案D

原样输出

void f(int x,int y)
这个函数实际上没有任何作用

无法改变main中变量的值

这是C语言传参问题

void f(int x,int y) 值传递

要使函数f能够生效应改成指针传递(C++更有引用方法)
void f(int *x,int *y)
{ int t;
if(*x<*y){ t=*x; *x=*y; *y=t; }
}

d
虽然你也用了函数调用,但函数并不返回值,所以a,b,c的值不变

原样输出

答案:D
兄台还是多多看书啊!呵呵!

d
程序在主函数中调用f函数把(a,b)\(a,c)\(b,c)分别传给函数f但这些都是值传递所以在不管函数f做了什么在内存中都是建立了以后又给释放了也就是说第一次调用函数f把a\b的值分别传给x\y在内存中分配给x\y地址又定义了一个t内存也给t分配了一个地址然后判段x是否小于y如果小于做交换。但最后不管做没做交换都是对x和y做而在函数f执行完了以后内存会自动释放它们在第二次调用的时候又从新为它们分配内存空间之后又释放所以不管怎么调用 对主函数中的a\b\c都不会有任何影响结果当然是b如果还不理解你可以在b函数最后一行加上
printf("%x,%x\n",x,y);来看看每次调用时x和y的地址

答案是4,3,5,因为在函数f中并没有改变a,b,c其值,只是按值传递不是按地址传递,所以不会改变a,b,c的值