我想交换两个包含2D数组的变量。我相信这可以通过交换指针来完成。我尝试了这段代码,但它不起作用,我不知道为什么,也许我不能正确理解指针。
#include <stdio.h>
void swap(int ***a, int ***b) {
int ** temp = *a;
*a = *b;
*b = temp;
}
int main(void) {
int a[10][10];
int b[10][10];
a[1][5] = 4;
b[1][5] = 2;
printf("%d, %d\n", a[1][5], b[1][5]);
swap(&b, &a);
printf("%d, %d\n", a[1][5], b[1][5]);
return 0;
}
此输出
4, 2
4, 2
我希望它能输出
4, 2
2, 4
那么,我做错了什么?
答案 0 :(得分:4)
a
函数中的 b
和main
不是指针而是数组。
如果你想使用指针,请使用指针。
#include <stdio.h>
#define N 10
void swap(int (**a)[N][N], int (**b)[N][N]) {
int (*temp)[N][N] = *a;
*a = *b;
*b = temp;
}
int main(void) {
int a[N][N];
int b[N][N];
int (*pa)[N][N] = &a;
int (*pb)[N][N] = &b;
(*pa)[1][5] = 4;
(*pb)[1][5] = 2;
printf("%d, %d\n", (*pa)[1][5], (*pb)[1][5]);
swap(&pb, &pa);
printf("%d, %d\n", (*pa)[1][5], (*pb)[1][5]);
return 0;
}
答案 1 :(得分:0)
这不起作用,因为您交换的内容实际上是swap()
函数中的变量指向的内容,而不是它们指向的内容。如果a
指向5
且b
指向6
函数中的swap()
,则会a
指向6
和b
指向5
,而不更改内存的内容。这意味着main()
函数中的variable
函数将位于同一位置,并且会被相同的a
b
和swap()
所指向(与变量中的变量不同) swap()
)
要进行交换,您需要在main()
函数中交换该内存的内容,以便它反映在*p
函数中。
回想一下,在使用指针进行交换时,可以通过取消引用(*q
和export LD_LIBRARY_PATH=/path/to/so
)来发送地址并实际交换内容。