我正在尝试将char *的2D数组传递给函数。我收到了这个错误:
"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);
}
答案 0 :(得分:4)
您的数组是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);
}
进一步阅读Stackoverflow上的这个Pet peeve条目。
答案 1 :(得分: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);
}
答案 2 :(得分:0)
这是引入参考概念的不好时机吗?
副手,我会说额外'&'在呼叫方需要。话虽如此,这是一场危险的比赛。
你为什么要分配这个?为什么它在堆栈上?为什么要在接收函数中将它键入char ***?
雅各
答案 3 :(得分:0)
试
int foo(char* hi[10][10])
{
}
int main()
{
char* bar[10][10];
return foo(bar);
}
或者,使用引用,向量向量或boost :: multi_array。