假设我们有这些声明:
int** a;
int b[x][y];
我可以实现一个功能
foo f(bar c) {}
让我
f(a);
f(b);
不需要超载吗?
答案 0 :(得分:1)
当然,只需使用void*
:)
要回答你的问题,不。多维数组与指针指针不同。原因是索引方案。 int b [2][2]
是一个包含4个整数的连续内存块。索引到它相当于:
b[i][j] == *(b + 2*i + j)
第二个维度是类型定义的一部分!编译器知道由于数组的内存布局,它只需要一个解除引用。
同时,对于int** a
,索引是这样完成的:
a[i][j] == *(*(a+i)+j)