计算机二级,计算机2级C语言解题下面这道题是我在考试365网站的
下面这道题是我在365网站的在线考试里做的一份试卷里的编程题,有些疑问 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
  我上机调试过了,就是   void swap1(int c0[],int c1[])   { int;   t=c0[0]; c0[0]=c1[0]; c1[0]=t;   }   这里有错误,因为 int t;差了一个t.   至于swap1(a , a-1)这个问题,好像a是特殊的,只有a[-1]=5, a[-2]=3,而测试b[-1],b[-2]就是一个地址值.使我百思不得其解。出题的人其实就是白痴一个,故弄玄虚。   当然我也不会被这个白痴考到,经过测试,大家看一组数据:   a[0]0xbf834c40   a[1]0xbf834c44   b[0]0xbf834c38   b[1]0xbf834c3c   a[-1]0xbf834c3c   a[-2]0xbf834c38   因为编译的时候,数组的分配地址是连续的,可以看出a[-1]的地址是b[1]的地址,也就是说a[-1]==b[1]==5,所以a-1的地址存放的是5.   所以一交换就变成55   而至于第二次交换是33就更好理解了,因为第一次交换是时候是用b[1]的地址,那么这时b[1]=a[0](原来的a[0])的值了,也就是说b[1]=3,而b[0]=3,所以这一句void swap2(int *c0,int *c1)交换其实是多余了,因为交不交换这两个值到是3.问题就这样解决了,真费时。   而对于这个朋友所说的   void swap2(int *c0,int *c1)传递是地址,在这个函数里面改动的是地址里面的内容,所以运行函数可以改变实参的值   其实void swap2(int *c0,int *c1)与void swap1(int c0[],int c1[])都可以交换值,同样是传递了地址。   所以不要被他误导了。   最后,我觉得这是极特殊的例子,没什么实际意义。但是考试就是喜欢考这种题,自以为高明,实不知愚蠢至极。