首页 > 解决方案 > 错误:无法将 'const char**' 转换为 'const char (*)[64]'

问题描述

我尝试实现如下源代码:

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

标签: c++arrayspointersargumentsimplicit-conversion

解决方案


数组声明为

char foo[10][10];

转换char( * )[10]为传递给函数时的类型。并且没有从 typechar ( * )[10]到 type的隐式转换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()

推荐阅读