2014-02-05 55 views
-1

我使用微軟的Visual Studio Express的2013年,努力使這個東西...代碼實際工作了,不過,有一個錯誤,用代碼C4047:'char *' differs in levels of indirection from 'char[24][50]'Multidimensional Arrays上有多少層次的間接?

是這樣嗎?

無視警告,程序正常工作,因爲我預計它沒有問題。我只是想了解和了解背後發生的事情。 (陳舊的)警告指出我在函數中傳遞多維數組的位置。下面是函數的參數行:

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] = { ... };

什麼是真正的問題?據我所知,一個多維數組不是一個數組的數組(它會有多個間接級別),而只是一個數組(它具有單一的間接級別)。

+0

'labels'是' char **'/指向字符串的指針=>指向指針的指針 –

回答

2

如果你傳遞一個二維數組到一個函數:

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

函數的聲明必須匹配:

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

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

我想補充一點'f(int labels [NROWS] [NCOLUMNS]){...}'顯然也可以工作我已經做到了,可能不需要,但我仍然做到了。非常感謝。如果我簡單地將'** labels'作爲函數的參數,就會發生不需要的事情。 – ThoAppelsin