C - 通过切换指针交换两个2D数组

时间:2015-11-29 13:33:11

标签: c arrays pointers multidimensional-array

我想交换两个包含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

那么,我做错了什么?

2 个答案:

答案 0 :(得分:4)

a函数中的

bmain不是指针而是数组。 如果你想使用指针,请使用指针。

#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指向5b指向6函数中的swap(),则会a指向6b指向5,而不更改内存的内容。这意味着main()函数中的variable函数将位于同一位置,并且会被相同的a bswap()所指向(与变量中的变量不同) swap()

要进行交换,您需要在main()函数中交换该内存的内容,以便它反映在*p函数中。

回想一下,在使用指针进行交换时,可以通过取消引用(*qexport LD_LIBRARY_PATH=/path/to/so)来发送地址并实际交换内容。