2009-08-12 81 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); 
}