Сколько существует уровней косвенности на многомерных массивах?

Я использую Microsoft Visual Studio Express 2013, пытаюсь сделать это что-то... Код на самом деле работает, но все же есть ошибка с кодом C4047: 'char *' differs in levels of indirection from 'char[24][50]'

Это так?

Не обращая внимания на предупреждение, программа работает, как я ожидал, она будет работать без проблем. Я только пытаюсь понять и узнать, что происходит позади. (Устаревшее) предупреждение указывает на строку, где я передаю многомерный массив в функции. Вот строка аргументов этой функции:

void mass_assigner(
    WORD * translations,
    char * labels,
    char * PermBannedKeys,
    char * TempBannedKeys,
    char * Cooldowns
)
{ ... }

и вот как я это называю из main:

...
mass_assigner(
    translations,
    labels,
    PermBannedKeys,
    TempBannedKeys,
    Cooldowns
);
...

где labels является char labels[24][50] = { ... };

В чем проблема на самом деле? Насколько я знаю, многомерный массив - это не массив массивов (которые будут иметь несколько уровней косвенности), а просто массив (который имеет один уровень косвенности).

1 ответ

Решение

Если вы передаете двумерный массив в функцию:

int labels[NROWS][NCOLUMNS];
f(labels);

объявление функции должно соответствовать:

void f(int labels[][NCOLUMNS])
{ ... }

или же

void f(int (*ap)[NCOLUMNS]) /* ap is a pointer to an array */
{ ... }
Другие вопросы по тегам