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