我试图将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