2009-08-12 117 views
1

我試圖將char * 2D數組傳遞給函數。我收到此錯誤:將2D char *數組傳遞給函數時出錯

"cannot convert 'char* (*)[2]' to 'char***' for argument '1' to 'int foo(char***)'" 

代碼:

int foo(char*** hi) 
{ 
    ... 
} 

int main() 
{ 
    char* bar[10][10]; 
    return foo(bar); 
} 

回答

4

您的陣列是一個數組10char*陣列,每個陣列存儲10char*指針。

這意味着,將它傳遞給參數不是引用的函數時,它將轉換爲pointer to an array of 10 char*。因此,正確的函數參數類型

int foo(char* (*hi)[10]) 
{ 
    ... 
} 

int main() 
{ 
    char* bar[10][10]; 
    return foo(bar); 
} 

進一步對#2這個Pet peeve進入閱讀。

0

這將是一個壞的時間來介紹引用的概念?

副手,我會說在呼叫方需要一個額外的'&'。這就是說,這是一個危險的遊戲。

你爲什麼分配這個?它爲什麼在堆棧上?爲什麼你在接收函數中輸入char ***?

雅各

0

嘗試

int foo(char* hi[10][10]) 
{ 
} 

int main() 
{ 
    char* bar[10][10]; 
    return foo(bar); 
} 

可替代地,使用參考,向量的向量或升壓::的multi_array。

+0

我不希望爲foo使用靜態數組大小。 – CookieOfFortune 2009-08-12 23:14:25

+0

@CookieOfFortune,請注意,編譯器不尊重第一個「10」。該參數與我的答案中的類型相同。 – 2009-08-12 23:24:32

1

如果數組大小不會改變,那麼最好在函數中使用對數組的引用。它更安全,更清潔。例如:

int foo(char* (&hi)[10][10]) 
{ 
int return_val = 0; 
//do something 
//hi[5][5] = 0; 
return return_val; 
} 

int main() 
{ 
    char* bar[10][10]; 
    return foo(bar); 
}