有以下程序:
#include<stdio.h>
void swap1(int c[])
int t;
t=c[0]; c[0]=c[1]; c[1]=t;
void swap2(int 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) 5353
B) 5335
C) 3535
D) 3553
参考答案:B
解析: 本题考核的知识点是函数调用中值传递和地址传递。函数间的参数的传递有两种情况,第一种情况变量作为形参时的参数传递,变量作为形参时,要求对应的实参应为变量或表达式,变量作为函数的参数其传递方式是“值传递”,该情况下,形参被赋值为实参的值,然后实参与形参再无联系,也就是说对形参的改变将不再影响实参;第二种情况是地址或数组名作为形参时的参数传递,该情况下对形参的改变将对实参产生影响。本题中函数swap1()是传递的地址。所以对该形参c的改变将影响实参,分析可知该函数的作用是使数组c的第一个元素和第二个元素的值互换,swap2()传递的是值,形参互换后不会影响实参,所以输出结果为5 3 3 5。