家装公司报价单:二级C考题,怎么做?怎么都没人,人少..

来源:百度文库 编辑:神马品牌网 时间:2024/05/10 19:26:06
有以下程序 × 正确答案为B
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)5 3 5 3
B)5 3 3 5
C)3 5 3 5
D)3 5 5 3
怎么是B呢,是A吧,答案是B

答案是B,注意传值与传址
swap1(A);
传递的参数是数组A,也就是数组名,数组名就是地址,也就是说参数的传递方式是传址,在swap1中进行了互换操作,也就改变了数组A中的值;
swap2(b[0],b[1]);
传递的参数是数组中的值,b[0],b[1]代表分别的是数组B中的值,而不是地址,所以参数的传递方式是传值,在swap2中进行的互换操作实际上是互换的形式参数c0, c1的值,并没有返回到B数组中去

swap1(A);
传递的参数是数组A,也就是数组名,数组名就是地址,也就是说参数的传递方式是传址,在swap1中进行了互换操作,也就改变了数组A中的值;
swap2(b[0],b[1]);
传递的参数是数组中的值,b[0],b[1]代表分别的是数组B中的值,而不是地址,所以参数的传递方式是传值,在swap2中进行的互换操作实际上是互换的形式参数c0, c1的值,并没有返回到B数组中去

swap2(b[0],b[1]);
这句话对B这个数组根本没有影响,只是提取b数组的两个值,并没有改变b的值

在哪?