【发布时间】:2018-04-22 13:15:01
【问题描述】:
所以我在一些讲义中有以下例子
void f(int **p){}
void g(int *p[]){}
void h(int p[2][3]){}
int main(){
int **a;
allocate_mem(a); // allocate memory for a
f(a); // OK!
g(a); // OK!
// h(a); // NOT OK
int b[2][3];
// f(b); // NOT OK
// g(b); // NOT OK
h(b); // OK!
return 0;
}
(没有任何进一步的解释/cmets)。我正在努力理解为什么 f(b) 和 g(b) 是非法的。这两个函数都被设计为接受二维数组,我们用一个来调用它们。这怎么行不通?我认为区别在于内存的分配,但这将如何影响函数接受它作为输入的方式?
【问题讨论】:
-
f和g接受指向int的指针,而不是数组。 -
allocate_mem不是标准 C。使用 malloc 或类似的 -
@melpomene 我的印象是数组只是指向第一个元素,但在阅读了 StoryTeller 链接的帖子后,它们似乎并不完全相同,并且将被视为不同的数据类型?
-
@HereBeeBees 数组和指针甚至不一样。他们没有任何共同点;只是数组可以隐式转换为指针(这在大多数情况下都会发生)。
标签: c pointers multidimensional-array pointer-to-pointer