C 为什么必须将列数作为函数参数传递?

C 为什么必须将列数作为函数参数传递?,c,function,gcc,matrix,parameters,C,Function,Gcc,Matrix,Parameters,当我在函数的参数中传递矩阵时,使用括号,我还需要传递列数。为什么? #include <stdio.h> //int function(int matrix[][5]){ //Will work int function(int matrix[][]){ //Won't work return matrix[0][0]; } int main(){ int matrix[5][5]; matrix[0][0] = 42; printf("%d",

当我在函数的参数中传递矩阵时,使用括号,我还需要传递列数。为什么?

#include <stdio.h>
//int function(int matrix[][5]){ //Will work
int function(int matrix[][]){   //Won't work
    return matrix[0][0];
}

int main(){
    int matrix[5][5];
    matrix[0][0] = 42;
    printf("%d", function(matrix));
}

感谢内存中的
int
s将被连续放置。如果只提供第一个维度,则无法确定所请求的int的位置。如果你的矩阵是

 1  2  3  4  5
 6  7  8  9 10
11 12 13 14 15
在内存中,它仍然显示为:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

如果我知道第二个维度中有5个
int
s,那么
matrix[2][1]
位于地址
matrix+(2*5)+1
,我必须按5列两次进入第三行,然后再向该行添加一个元素以获得该列。如果没有第二维度的大小,我无法计算这些值将出现在内存中的什么位置。(在本例中,“I”表示编译器/运行时)

谢谢@ryan haining!你帮助我理解了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15