Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
假设我们有这些声明:
int** a; int b[x][y];
我可以实现一个功能
foo f(bar c) {}
这让我
f(a); f(b);
不需要超载吗?
当然,只需使用void*:)
void*
回答你的问题,不。多维数组与指向指针的指针不同。原因是索引方案。int b [2][2]是 4 个整数的连续内存块。对其进行索引等效于以下内容:
int b [2][2]
b[i][j] == *(b + 2*i + j)
第二维是类型定义的一部分!由于数组的内存布局,编译器知道它只需要一次取消引用。
同时,int** a索引是这样完成的:
int** a
a[i][j] == *(*(a+i)+j)