正确的答案应该是:不确定!可惜,出题人没给出这一答案。为了说明这一问题,我把程序改了改,让楼主能看得更清楚一些(在Dev C++中调试运行)。
#include <stdio.h>
#include <stdlib.h>
void swap1(int c0[], int c1[])
{
int
t;
printf("c0[0]=%d c1[0] = %d\n", c0[0], c1[0]);
t=c0[0];
c0[0]=c1[0];
c1[0]=t;
printf("c0[0]=%d c1[0] = %d\n", c0[0], c1[0]);
}
void swap2(int
*c0,int
*c1)
{
int t;
t=*c0;
*c0=*c1;
*c1=t;
}
int main()
{
int
a[2]={3,5}, b[2]={3,5};
//读者可以打印出a、a-1、a-2、a-3的值观察一下并画出内存示意图后进行分析!
//不难知道,地址为a-1、a-2、a-3的单元中的值是无法知道是多少的!!
printf("a=%x, a-2=%x, &a[0]=%x, &a[1]=%x\n", a, a-2, &a[0], &a[1]);
//你能知道*(a-1),*(a-2),*(a-3)中的结果吗??是的,是不确定的!
//既然你不有确定,那你能确定swap(a, a-1)后的结果吗???
printf("*a=%d, *(a-1)=%d, *(a-2)=%d, *(a-3)=%d\n", *a, *(a-1), *(a-2), *(a-3));
swap1(a, a-1);
swap2(&b[0],&b[1]);
printf("%d
%d
%d
%d \n",a[0],a[1],b[0],b[1]);
swap1(a, a-2);
printf("%d
%d
%d
%d \n",a[0],a[1],b[0],b[1]);
swap1(a, a-2);
printf("%d
%d
%d
%d \n",a[0],a[1],b[0],b[1]);
swap1(a, a-3);
//在我的这次执行中,*(a-3)中的值,等于16!!!
printf("%d
%d
%d
%d \n",a[0],a[1],b[0],b[1]);
system("PAUSE");
return 0;
}
运行结果如下(当然,在你机器上运行结果可能与这不一样哟):
a=22ff70, a-2=22ff68, &a[0]=22ff70, &a[1]=22ff74
*a=3, *(a-1)=5, *(a-2)=3, *(a-3)=16
c0[0]=3 c1[0] = 5
c0[0]=5 c1[0] = 3
5
5
3
3
c0[0]=5 c1[0] = 3
c0[0]=3 c1[0] = 5
3
5
5
3
c0[0]=3 c1[0] = 5
c0[0]=5 c1[0] = 3
5
5
3
3
c0[0]=5 c1[0] = 16
c0[0]=16 c1[0] = 5
16
5
3
3
请按任意键继续. . .