我在int main()
和矩阵a[][]
中定义了一个全局变量,我没有初始化该变量。
然后我使用了一些功能:
-
第一个:接收矩阵
a
作为自变量,然后将a[i][j]
定义为某个值(随机),这适用于适当范围内的所有i和j。函数只返回1; -
第二个:接收矩阵
a
作为参数并简单地打印它。这个函数也简单地返回1; -
最后一个:接收矩阵
a
作为自变量,然后确定其值的最大值并返回该值
我天真地认为,在不定义指向矩阵的指针的情况下简单地编写代码,使矩阵的变量全局化并可从所有函数中共享,代码根本不起作用。但它奏效了。我认为它不会起作用,因为我没有以全局的方式定义矩阵,但它只在函数中定义,然后(对我来说:)假装传递给其他函数。
所以我的问题是:为什么它有效?
代码:
int matrix_definition(int a[][], int dim);
int matrix_print(int a[][], int dim);
int max_matrix(int a[][],int dim);
int main()
{
int a[][], dim;
matrix_definition(a,dim);
matrix_print(a,dim);
printf("%d", max_matrix(a,dim));
return 0;
}
包括main()和matrix_definition在内的完整代码如下:
#include<stdio.h>
#define SIZE 100
int matrix_definition(int a[SIZE][SIZE], int dim);
int matrix_print(int a[SIZE][SIZE], int dim);
int max_matrix(int a[SIZE][SIZE],int dim);
int main()
{
int a[SIZE][SIZE], dim;
matrix_definition(a,dim);
matrix_print(a,dim);
printf("%d", max_matrix(a,dim));
return 0;
}
int matrix_definition(int a[SIZE][SIZE],int dim)
{
int i,j;
srand(time(NULL));
for(i=0;i<dim;i++)
{
for(j=0;j<dim;j++)
{
a[i][j]=rand()%2;
}
}
return 1;
}
您发布的更新代码与最初发布的代码非常不同。是的,该代码对于a
的定义以及如何将其传递给各种函数都是有效的。
在每个函数声明中,您都声明了一个参数:
int a[SIZE][SIZE]
由于数组作为参数被转换为指针,这相当于:
int (*a)[SIZE]
这与main
:中定义的变量兼容
int a[SIZE][SIZE];
将数组传递给函数时,它会衰减为指向第一个元素的指针。所以这个函数调用:
matrix_definition(a,dim);
与相同
matrix_definition(&a[0],dim);
表达式a[0]
具有int [SIZE]
类型,因此表达式&a[0]
具有int (*)[SIZE]
类型。这与函数的参数相同。