分类：电脑/网络-操作系统/系统故障
问题：计算机二级，计算机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\n",a[0],a[1],b[0],b[下面这道题是我在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\n",a[0],a[1],b[0],b[1]); } 请高手解释下这里a和&b[0]的传递对结果有什么区别，最后结果是多少，谢谢，
回答：　　我上机调试过了，就是　　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[])都可以交换值，同样是传递了地址。　　所以不要被他误导了。　　最后，我觉得这是极特殊的例子，没什么实际意义。但是考试就是喜欢考这种题，自以为高明，实不知愚蠢至极。