我定义了一个数组int a[5];
声明了两个函数,一个是赋值函数,一个是交换函数
void f1(int *a)
{
a[0]=1;
a[1]=2;
}
void swap(int *x,int *y)
{
int *temp;
*temp=*x;
*x=*y;
*y=*temp;
}
现在,我要使用函数嵌套调用去交换a[0]与a[1]的值,是这样写是正确的
void f1(int *a)
{
a[0]=1;
a[1]=2;
swap(a[0],a[1]);
}
还是这样写是正确的?
void f1(int *a)
{
a[0]=1;
a[1]=2;
swap(&a[0],&a[1]);
}
void swap(int *x,int *y)
{
int temp;
temp=*x;
*x=*y;
*y=temp;
}
swap(&a[0],&a[1]);
首先,你要知道你是要交换a[0] a[1]之间的值,而不是交换它们的内存地址。
然后,void swap(int *x,int *y)函数中,形参为指针类型,也就是说是地址,而函数内容交换的值则是该地址所存储的数据。
这样就清楚了,形参写入所要交换的值的地址,然后地址存储的值得到交换。
所以 swap(&a[0],&a[1])。
swap(a[0],a[1]); 这样写是错误的,你这样写相当于把a[0] 和 a[1] 的值当做地址去处理,编译可以通过,但是执行得不到你想要的结果。
正确写法就是你下面这种,swap(&a[0],&a[1]); 也可以这样:swap(a, a+1);
你的那个swap函数就写错了,里面怎么能用一个整数去交换整数呢?你这样有可能让程序崩溃,虽然说在大多数情况下很可能得到正确结果。
void f1(int *a)
{
a[0]=1;
a[1]=2;
swap(&a[0],&a[1]); //或者 swap( a , a+1);
}
void swap(int *x,int *y)
{
int temp;
temp=*x;
*x=*y;
*y=temp;
}