我試圖將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);
}
我試圖將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);
}
您的陣列是一個數組10
char*
陣列,每個陣列存儲10
char*
指針。
這意味着,將它傳遞給參數不是引用的函數時,它將轉換爲pointer to an array of 10 char*
。因此,正確的函數參數類型
int foo(char* (*hi)[10])
{
...
}
int main()
{
char* bar[10][10];
return foo(bar);
}
進一步對#2這個Pet peeve進入閱讀。
這將是一個壞的時間來介紹引用的概念?
副手,我會說在呼叫方需要一個額外的'&'。這就是說,這是一個危險的遊戲。
你爲什麼分配這個?它爲什麼在堆棧上?爲什麼你在接收函數中輸入char ***?
雅各
嘗試
int foo(char* hi[10][10])
{
}
int main()
{
char* bar[10][10];
return foo(bar);
}
可替代地,使用參考,向量的向量或升壓::的multi_array。
如果數組大小不會改變,那麼最好在函數中使用對數組的引用。它更安全,更清潔。例如:
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);
}
我不希望爲foo使用靜態數組大小。 – CookieOfFortune 2009-08-12 23:14:25
@CookieOfFortune,請注意,編譯器不尊重第一個「10」。該參數與我的答案中的類型相同。 – 2009-08-12 23:24:32