问题 单项选择题

有以下程序:
void swapl(int c[])
int t;
t=c[0]; c[0]=c[1]; c[1]=t;

void swap2int c0, int c1)
int t;
t=c0; c0=c1; c1=t;

main()
int a[2]=3,5, b[2]=3,5;
swap1 (

A.; swap2 (b[0],b[1]);
printf("%d %d %d %d\n",a[0],a[1],b[0],b[1]);

其输出结果是A) 5 3 5 3

B.5 3 3 5

C.3 5 3 5

D.3 5 5 3

答案

参考答案:B

解析: 本题考核的知识点是函数调用中值传递和地址传递。函数间的参数的传递有两种情况,第1种情况变量作为形参时的参数传递,变量作为形参时,要求对应的实参应为变量或表达式,变量作为函数的参数其传递方式是“值传递”,该种情况下,形参被赋值为实参的值,然后实参与形参再无联系。也就是说对行参的改变将不再影响实参:第2种情况是地址或数组名作为形参时的参数传递,该种情况下对形参的改变将对实参产生影响。本题中函数swap1()是传递的地址。所以对该形参c的改变将影响实参,分析可知该函数的作用,是使数组c的第一个元素和第二个元素的值互换。主函数中调用该函数将a作为实参传递给形参c,故执行该函数后a的第一个元素和第二个元素的值将交换。分别为5和2.函数swap2()是值传递的,所以该函数执行后对数组b将没有任何改变,此时该数组的第一个和第二个元素依然为3和5,因此最后的输出为5、3,3和5,所以,4个选项中选项B符合题意。

单项选择题
单项选择题