我在处理多维数组时遇到了问题。我试图让“123”“456”“X123”和“x456”在屏幕上出现使用指针的函数里面:在C中迭代多维数组而不知道索引
void f(char ***array){
while (**array != '\0'){
while (*array != '\0'){
printf("%s\n",*array);array++;
}
}
}
int main(){
char* arr[50][50]={{"123","456"},{"X123","X456"}};
f(arr);
return 0;
}
编译时,我收到了警告passing argument 1 of 'f' from incompatible pointer type
在该行f(arr);
。并在运行代码时,我看到:
123
456
Segmentation fault
程序退出。
当我将代码改成这样:
void f(char **array){
while (*array != '\0'){
printf("%s\n",*array);array++;
}
}
int main(){
char* arr[50]={"123","456"};
f(arr);
return 0;
}
的数字重复罚款,但我宁愿我的组数据成组在某些时候更好的组织。为什么第一组具有多维数组的代码不能正确执行?
三颗星?重新思考代码的时间,但无法找到相关链接,除非http://stackoverflow.com/questions/10087113/how-many-levels-of-pointers-can-we-have –
C多维数组* * *与指向数组的指针数组一样。你需要写'void f(const char * array [] [50]){...}'。或者,使用GNU非编译时常量多维数组维度:void f(const int cols,const char * array [] [cols]){...}。自从我这样做以来已经有一段时间了,但我认为这是有效的。无论是或者你的函数内部,你都必须将'array'转换为指向该类型数组的指针。 –
@PeterCordes作为参数的尺寸是C99的一部分。 – Jason