ABD*_*ABD 13 c arrays pointers multidimensional-array variable-length-array
我试图理解将多维数组传递给c中的函数的"最佳实践"(或实际上是任何实践).当然这取决于应用程序,因此我们考虑编写一个函数来打印可变大小的2D数组.特别是,我对如何printArry(__, int a, int b)在下面的代码中编写函数感兴趣.我省略了第一个参数,因为我不确定应该是什么.
void printArry(_____, int a, int b){
/* what goes here? */
}
int main(int argc, char** argv){
int a1=5;
int b1=6;
int a2=7;
int a2=8;
int arry1[a1][b1];
int arry2[a2][b2];
/* set values in arrays */
printArry(arry1, a1, b1);
printArry(arry2, a2, b2);
}
Run Code Online (Sandbox Code Playgroud)
hac*_*cks 16
最简单的方法是(适用于C99及更高版本)
void printArry(int a, int b, int arr[a][b]){
/* what goes here? */
}
Run Code Online (Sandbox Code Playgroud)
但是,还有其他方法
void printArry(int a, int b, int arr[][b]){
/* what goes here? */
}
Run Code Online (Sandbox Code Playgroud)
要么
void printArry(int a, int b, int (*arr)[b]){
/* what goes here? */
}
Run Code Online (Sandbox Code Playgroud)
编译器将调整前两个到第三个语法.所以,从语义上讲,这三者都是相同的.
并且有点令人困惑,它只能作为函数原型使用:
void printArry(int a, int b, int arr[*][*]);
Run Code Online (Sandbox Code Playgroud)