Сколько существует уровней косвенности на многомерных массивах?
Я использую 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 */
{ ... }