我在處理多維數組時遇到了問題。我試圖讓「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