ошибка: невозможно преобразовать const char ** в const char (*) [64] - PullRequest
1 голос
/ 23 сентября 2019

Я пытаюсь реализовать исходный код, как показано ниже:

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 Ответ

1 голос
/ 23 сентября 2019

Массив, объявленный как

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()
...