错误:无法将"常量字符**"转换为"常量字符 (*)[64]"

error: cannot convert 'const char**' to 'const char (*)[64]'

本文关键字:常量 字符 转换 错误      更新时间:2023-10-16

我尝试实现源代码如下:

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]在这种情况下是相似的,不是吗?

声明的数组

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]

注意函数主应该声明为类似

int main()

而不是

void main()