传递可变大小的多维数组

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)

  • 我从来不知道`int arr [a] [b]`是一个选项作为参数; 什么时候出现在标准中? (2认同)