题目
请写出下面程序运行结果:()。#include"stdio.h"void exchange(int x, int y){ int temp;temp = x;x = y;y = temp;}int main(){ int a = 5, b = 3;exchange(a, b);printf("%d,%d",a,b);return 0;}A. 5,3B. 3,5C. 5,5D. 3,3
请写出下面程序运行结果:()。 #include"stdio.h" void exchange(int x, int y) { int temp; temp = x; x = y; y = temp; } int main() { int a = 5, b = 3; exchange(a, b); printf("%d,%d",a,b); return 0; } A. 5,3 B. 3,5 C. 5,5 D. 3,3
题目解答
答案
本题考察函数参数传递[1]方式的理解。`exchange`函数中,`x`和`y`是`a`和`b`的值的副本,对它们的修改不会影响`main`函数中的`a`和`b`。因此,`a`和`b`的值保持不变,分别为`5`和`3`。
程序输出为:`5,3`。
答案:A. 5,3
解析
本题考查C语言中函数参数传递的知识。解题的关键在于理解C语言中函数参数传递采用的是值传递方式。
在值传递中,当调用函数时,会将实参的值复制一份传递给形参。在函数内部对形参的修改,仅仅是修改了形参这个副本的值,并不会影响到实参本身的值。
下面我们来详细分析代码的执行过程:
- 在
main函数中,定义了两个整型变量a和b,并分别初始化为5和3,即int a = 5, b = 3;。 - 调用
exchange函数,将a和b作为实参传递给exchange函数。在传递过程中,会将a的值5复制给exchange函数的形参x,将b的值3复制给exchange函数的形参y。此时,x的值为5,y的值为3。 - 在
exchange函数内部,通过临时变量temp交换了x和y的值。具体步骤如下:temp = x;:将x的值5赋给temp,此时temp的值为5。x = y;:将y的值3赋给x,此时x的值为3。y = temp;:将temp的值5赋给y,此时y的值为5。
但是,这些修改只是针对x和y这两个形参副本,并不会影响到main函数中的a和b。
- 回到
main函数,执行printf("%d,%d",a,b);语句,输出a和b的值。由于a和b的值没有被改变,所以输出结果为5,3。