考虑以下C程序:
#include <stdio.h>
void swap(int []);
int main(void) {
int a[3] = {1, 2, 3};
swap(a);
printf("%d %d %d\n", a[0], a[1], a[2]);
swap(&a[1]);
printf("%d %d %d\n", a[0], a[1], a[2]);
return 0;
}
void swap(int x[]) {
int temp = x[0];
x[0] = x[1];
x[1] = temp;
}
谁能解释以下代码为何给出输出的原因
2 1 3
2 3 1
而不是
2 1 3
1 2 3
我知道swap(a)
交换a[0]
和a[1]
。但我不确定如何swap(&a[1])
运作。在两种情况下,我们都将数组传递a
给函数swap
,不是吗?因此,我的假设是,swap(&a[1])
应当再次交换a[0]
和a[1]
,使我们回原来的顺序2 3 1
。
编辑:此代码是按预期编写的。我只是想看看如果我们将第一个元素以外的其他元素的地址传递给函数会发生什么。显然,如果我传入&a[n]
函数,它将忽略之前的所有元素a[n]
并将其视为a[n]
第一个元素?
您的交换函数将整数地址和地址作为输入,并将该地址处的元素与下一个地址处的元素交换。
swap(a) is same as swap(&a[0])
It will swap element at index 0 with element at index 1.
Now your array becomes {2,1,3}
swap(&a[1]) swaps element at index 1 with element at index 2.
So your array now becomes {2,3,1}
请记住,实际上传递数组时,您传递的是索引0(&a[0]
)的元素地址。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句