c++ - 通过指针将二维数组传递给 C++ 中的函数

标签 c++ pointers

<分区>

Possible Duplicate:
How do I use arrays in C++?

如何通过指针将二维数组传递给 C++ 中的函数。 当我尝试下面的代码时出现以下错误。

错误:无法将参数“1”的“int (*)[10][10]”转换为“int **”到“void fn(int **)”

void fn(int **a)
{
cout<<a[0][0]<<" "<<a[0][1];
}

int main()
{

int A[10][10];
A[0][0]=1;
A[0][1]=2;

fn(&A);   //????
}

最佳答案

按照您的方式创建的二维数组在内存中是连续的。编译器需要知道每个段的大小,以便能够将指针移动到函数中的下一个段。编写 fn(int (*a)[3])fn(int a[][3]) 是等效的。但是让我们举个例子

char a[3][3];

a[0][0] = 01;
a[0][1] = 02;
a[0][2] = 03;
a[1][0] = 04;
a[1][1] = 05;
a[1][2] = 06;
a[2][0] = 07;
a[2][1] = 08;
a[2][2] = 09;

会变成

|01|02|03|04|05|06|07|08|09|

在内存中。

因此,如果您将 a 传递给一个函数,它需要知道它必须将 a ptr 增加 3 * sizeof(a) 访问 a[1][0]

简而言之:函数的原型(prototype)需要是 void fn(int a[][10])void fn(int (*a)[10])

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

相关文章:

c++ - 在多线程程序中实现动态屏障的可能方法

pointers - 如何在MQL中定义指向类的静态指针?

c++ - C++中,如何获取类实例字段的值所在的地址?

c - 在 c 中为队列推送中的临时分配内存时出错,来自 valgrind 的写入大小为 8 无效

c++ - 为什么我们不关心位顺序?

c++ - 类定义中静态常量成员map<>的初始化

c++ - 无法在程序中指定文件路径前缀

c - 错误返回修改指针

c - 指针(?)导致 C 程序崩溃

c++ - 笔记本电脑和固定电脑上的结果不同