可能重复:
将表示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)
但程序崩溃了.我做错了什么?
你的数组是类型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)
确保更改声明和定义.
它崩溃是因为数组不是指向指针的指针,它会尝试读取数组值,就好像它们是指针一样,但数组只包含数据而没有任何指针。
数组在内存中都是相邻的,只接受一个指针并在调用函数时进行强制转换:
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)