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

标签 c++ c pointers

<分区>

Possible Duplicate:
Passing a pointer representing a 2D array to a function in 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;
        }
    }
}

但是程序因此崩溃了。我做错了什么?

最佳答案

您的数组的类型为 int[2][2](“2 个 int 数组的数组”),它的名称将衰减为指向其第一个元素的指针,该元素的类型int(*)[2](“指向 2 int 数组的指针”)。所以你的 func 需要接受这种类型的参数:

void func(int (*ptr)[2]);
// equivalently:
// void func(int ptr[][2]);

或者,您可以引用数组类型(“对 2 数组的 2 数组的引用”):

void func(int (&ptr)[2][2]);

确保更改声明和定义。

关于c++ - 如何通过c中的指针传递二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30537362/

相关文章:

c++ - 是否有一种模式可以命名管理邪恶的 static_casts

c++ - 如何使用 boost 日志防止内存增长?

c - C 什么时候决定 char[] 是字符数组还是字符串?

c++ - 指向 char 数组的整数指针

c++ - 如何知道输入到 std::array 的最后一个元素是哪个?

c++ - 在 VS Code 中编译 C/C++

c - Linux C:类似于Shell的环境-用于单独执行-C命令? (C口译员)

c - 嵌入式 8051 的堆栈和堆混淆

c++ - 将 vector 中的对象指针移动到不同的 vector

c - 指向可变修改类型的指针的指针算法