二维静态和动态阵列传递

时间:2012-12-01 23:30:44

标签: c++

假设我们有这些声明:

int** a;
int b[x][y];

我可以实现一个功能

foo f(bar c) {}

让我

f(a);
f(b);

不需要超载吗?

1 个答案:

答案 0 :(得分:1)

当然,只需使用void*:)

要回答你的问题,不。多维数组与指针指针不同。原因是索引方案。 int b [2][2]是一个包含4个整数的连续内存块。索引到它相当于:

b[i][j] == *(b + 2*i + j)

第二个维度是类型定义的一部分!编译器知道由于数组的内存布局,它只需要一个解除引用。

同时,对于int** a,索引是这样完成的:

a[i][j] == *(*(a+i)+j)