ipad钢琴天空之城琴谱:一样吗?(C语言)两个函数

来源:百度文库 编辑:高校问答 时间:2024/04/26 21:36:10
1.void swap1(int c0[], int c1[])
?? { int t ;
?? t=c0[0]; c0[0]=c1[0]; c1[0]=t;
?? }
2.void swap2(int *c0, int *c1)
?? { int t;
?? t=*c0; *c0=*c1; *c1=t;
?? }
40)有以下程序
?? void swap1(int c0[], int c1[])
?? { int t ;
?? t=c0[0]; c0[0]=c1[0]; c1[0]=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, a+1); swap2(&b[0], &b[1]);
?? printf("%d %d %d %d\n",a[0],a[1],b[0],b[1]);
?? }
??程序运行后的输出结果是
?? A)3 5 5 3 B)5 3 3 5 C)3 5 3 5 D)5 3 5 3

一样。JAVA,C#这些语言里,数组是类,本身包括了数组长度啊等各种信息,不需要使用指针来实现数组操作。但C语言不行,数组就是一组数据而已,形参写成int a[]和写成int *a其实效果是一样,都必须加上表示数组长度的变量,才能保证对数组全部数据的正确操作。

选D啊,没什么问题嘛。
a就是a[0]的地址,a+1就是a[1]的地址,传int *和传int []效果是一样的。

D

仔细观察, 不难发现, 两个交换函数实际上传的都是地址。 由于是相应地址上的值做了修改, 所以交换函数中的交换能在返回主函数时体现出来。