C中的矩阵:函数共享局部变量吗



我在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]类型。这与函数的参数相同。

相关内容

  • 没有找到相关文章

最新更新