有以下程序 void swapl(int c[]) { int t; t=c[0];c[0]=c[1];c[1]=t; } void swap2(int c0,int c1) {int t; t=c0

admin2009-04-15  26

问题 有以下程序    void swapl(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};       swapl(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

答案2

解析 函数间的参数的传递有两种情况,第一种情况变量作为形参时的参数传递,变量作为形参时,要求对应的实参应为变量或表达式,变量作为函数的参数其传递方式是“值传递”,该种情况下,形参被赋值为实参的值,然后实参与形参再无联系。也就是说对形参的改变将不再影响实参;第二种情况是地址或数组名作为形参时的参数传递,该种情况下对形参的改变将对实参产生影响。本题中函数swapl()是传递的地址。所以对该形参c的改变将影响实参,分析可知该函数的作用,是使数组c的第一个元素和第二个元素的值互换。主函数中调用该函数将a作为实参传递给形参c,故执行该函数后 a的第一个元素和第二个元素的值将交换。分别为5和2。函数swap2()是值传递的,所以该函数执行后对数组b将没有任何改变,此时该数组的第一个和第二个元素依然为3和5,因此最后的输出为5、3、3和5。
转载请注明原文地址:https://kaotiyun.com/show/NoWp777K
0

最新回复(0)