计算机2级C语言解题

来源:百度知道 编辑:UC知道 时间:2024/06/30 18:27:08
void swap1(int c0[],int c1[])
{ int;
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和&b[0]的传递对结果有什么区别,最后结果是多少,谢谢

首先给出一个概念,数组就是指针,指针就是数组。若未理解先向下看,最后我再讲明。

(一)swap1(a,a+1);
void swap1(int c0[],int c1[])函数的两个参数是两个未制定长度的数组,也可以看作两个指针。
再看程序体,可见swap1完成了c0[],c1[]两个指针指向的值c0[0]和c1[0]的交换。
而a,a+1是两个地址(即指针),分别指向a[0],a[1](规定数组名a为指向数组第一个元素的指针)。
执行swap1(a,a+1)时,a,a+1的值(就是a[0],a[1]的地址)复制到c0[],c1[]两个指针,此时c0[],c1[]两个指针分别指向a[0],a[1]。“swap1完成了c0[],c1[]两个指针指向的值的交换”,即a[0],a[1]的交换。
故a数组变为5,3

(二)swap2(&b[0],&b[1]);
void swap2(int *c0,int *c1)函数的两个参数很明显就是两个指针。
再看程序体,可见swap2完成了c0,c1两个指针指向的值*c0,*c1的交换。
而&b[0],&b[1]是两个地址(即指针),分别指向b[0],b[1]。
执行swap2(&b[0],&b[1])时,&b[0],&b[1]的值(就是b[0],b[1]的地址)复制到c0,c1两个指针,此时c0,c1两个指针分别指向b[0],b[1]。“swap2完成了c0,c1两个指针指向的值*c0,*c1的交换”,即b[0],b[1]的交换。
故b数组变为5,3

(三)最后结果:
printf语句将a[0],a[1],b[0],b[1]四个值依次输出,则结果为5353

(四)回到开头
学指针没弄清指针与数组的关系,以后会很混乱,尤其是到了多位数组。

数组是指针:

首先,C程序见到int a[10];,它会在内存里开辟一段能连续放下10个整形数据的部分内存。

向数组其中赋值时,如a[3]=0;。C程序识别为“*(a+3)=0”,即将a+3地址指向的值赋为0。