我有一个参数类型为char *(*)[]
的函数,我在char ***
类型的对象上调用该函数。为什么GCC警告"不兼容的指针类型"?
编辑:好的,我刚刚意识到[]
不应该用于第一个索引以外的任何内容。但我真的不明白char *(*)[]
对函数参数的实际意义。
答案 0 :(得分:1)
它们不兼容。
char *(*p)[]
这意味着p
是指向数组的指针 - 该数组包含char*
。
char* p[2][3];
当传递给函数时,将衰减为该类型的对象。(这是一个示例,其中一个数组衰减到这个中)。但是在传递数组时,您需要传递除第一个之外的任何其他尺寸信息(发生衰减)。如果在使用传递的对象和索引时未指定此项,则无法正确检索元素。
所以看到这个
是正确的char *(*p)[3]
在函数签名中。
同样char***
与上述情况无关。 char***
- 它将是指向指向char的指针的指针。