我尝试实现以下源代码:
bool getParam(char* cmd, char** prm_arr, int num)
{
}
void main()
{
char strC[] = "btOK,btCancel";
char foo[10][10];
bool res = getParam(strC,foo,2);
}
显示错误:
error: cannot convert ‘char (*)[10]’ to ‘char**’ for argument ‘2’ to ‘bool getParam(char*, char**, int)’
bool res = getParam(strC,foo,2);
在这种情况下,我认为char **和char(*)[10]相似,不是吗?
答案 0 :(得分:1)
像这样声明的数组
char foo[10][10];
传递给函数时,会转换为类型char( * )[10]
。并且没有从类型char ( * )[10]
到类型char *
的隐式转换。
所以函数声明应该
bool getParam(char* cmd, char ( *prm_arr )[10], int num);
在具有极少数例外的表达式中,数组会转换为指向数组元素类型的指针。
例如,如果您有一个类型为T的数组
T a[N];
当数组转换为类型T *
时。
在数组foo
的声明中,其元素的类型为char[10]
。因此,数组将转换为指向元素类型char ( * )[10]
请注意,函数main的声明应类似于
int main()
代替
void main()