3

假设我们有这些声明:

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

我可以实现一个功能

foo f(bar c) {}

这让我

f(a);
f(b);

不需要超载吗?

4

1 回答 1

1

当然,只需使用void*:)

回答你的问题,不。多维数组与指向指针的指针不同。原因是索引方案。int b [2][2]是 4 个整数的连续内存块。对其进行索引等效于以下内容:

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

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

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

a[i][j] == *(*(a+i)+j)
于 2012-12-02T00:05:28.157 回答