错误:无法将'const char **'转换为'const char(*)[64]'

时间:2019-09-23 09:19:48

标签: c++ arrays pointers arguments implicit-conversion

我尝试实现以下源代码:

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]相似,不是吗?

1 个答案:

答案 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()