将2D char *数组传递给函数时出错

时间:2009-08-12 23:07:20

标签: c++ arrays casting char

我正在尝试将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);
}

4 个答案:

答案 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。