如何通过c中的指针传递二维数组

Say*_*hdi 8 c c++ pointers

可能重复:
将表示2D数组的指针传递给C++中的函数

我试图通过指针将我的二维数组传递给函数,并希望修改值.

#include <stdio.h>

void func(int **ptr);

int main() {
    int array[2][2] = {
        {2, 5}, {3, 6}
    };

    func(array);

    printf("%d", array[0][0]);
    getch();
}

void func(int **ptr) {
    int i, j;
    for (i = 0; i < 2; i++) {
        for (j = 0; j < 2; j++) {
            ptr[i][j] = 8;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但程序崩溃了.我做错了什么?

Jos*_*eld 9

你的数组是类型int[2][2]("2个数组的2个数组的数组"),它的名称会衰减到指向它的第一个元素的int(*)[2]指针("指向2个数组的指针").所以你func需要采用这种类型的参数:

void func(int (*ptr)[2]);
// equivalently:
// void func(int ptr[][2]);
Run Code Online (Sandbox Code Playgroud)

或者,您可以引用数组类型("引用2个数组的数组2 int"):

void func(int (&ptr)[2][2]);
Run Code Online (Sandbox Code Playgroud)

确保更改声明和定义.


Ram*_*uri 3

它崩溃是因为数组不是指向指针的指针,它会尝试读取数组值,就好像它们是指针一样,但数组只包含数据而没有任何指针。
数组在内存中都是相邻的,只接受一个指针并在调用函数时进行强制转换:

func((int*)array);
Run Code Online (Sandbox Code Playgroud)

...

void func(int *ptr) {
    int i, j;
    for (i = 0; i < 2; i++) {
        for (j = 0; j < 2; j++) {
            ptr[i+j*2]=8;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)