多维数组有多少级别的间接?

时间:2014-02-05 13:47:22

标签: c string multidimensional-array multiple-indirection

我正在使用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
);
...

其中labelschar labels[24][50] = { ... };

真的是什么问题?据我所知,多维数组不是数组数组(它有多个间接级别),而只是一个数组(具有单级间接)。

1 个答案:

答案 0 :(得分:2)

如果要将二维数组传递给函数:

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

函数的声明必须匹配:

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

void f(int (*ap)[NCOLUMNS]) /* ap is a pointer to an array */
{ ... }