在 C99 中,我对这里的区别有点困惑:
int myfunc (int array[n], int n) { ... }
不会编译。据我所知,您必须始终将对数组大小的引用放在首位,因此必须编写:
int myfunc (int n, int array[n]) { ... }
但是,如果您提供 static 关键字,这绝对可以正常工作:
int myfunc (int array[static 1], int n) { ... }
这个顺序对我来说更可取,因为我习惯于在函数调用中将数组放在第一位,但为什么会这样呢?
编辑:意识到第三个示例实际上不是 VLA 有助于...
作为参考,这是我正在查看的导致问题的代码:
int sum_array(int n, int m, int a[n][m])
{
int i, j, sum = 0;
for (i = 0; i < n; i++)
for (j = 0; j < m; j++)
sum += a[i][j];
return sum;
}