gpt4 book ai didi

c - 为什么我不能将二维数组传递给这个定义的函数?

转载 作者:太空宇宙 更新时间:2023-11-04 07:02:17 25 4
gpt4 key购买 nike

int checkdiag(int arr[][100], int size)
{
int h=0,i,j,count=0;
for(i=0;i<size;i++)
for(j=0;j<size;j++)
if(arr[i][j]==arr[++i][++i])
count++;
if(count=size)
h=1;
return(h);
}

此函数应该检查我的二维数组以查看所有对角线是否具有相同的值。最大数组大小为 100 x 100。

int 
main(void)
{
int r,c,**m,i,j;
FILE*in;
in=fopen("matrix.txt","r");
fscanf(in,"%d",&r);
c=r;
m=(int**)malloc(r*sizeof(int*));

for(i=0;i<r;i++)
m[i]=(int*)malloc(c*sizeof(int));

for(i=0;i<r;i++)
{
for (j=0; j<c; j++)
{
fscanf(in,"%d",&m[i][j]);
}
}
fclose(in);
checkdiag(m,r)
return(0);
}

最佳答案

To pass a 2D as a function parameter in C, you need to specify the length of the array, and the length of each array element.

您在问题中提供的代码应该只要您使用的是 C99 就可以正常工作。否则,您必须指定每个数组元素的长度和长度。

您不能在不声明这些变量的情况下简单地使用变量指定数组长度和元素长度 -

void array_function(int array[][n]);  //Wrong!
void array_function(int array[m][]); //Wrong!
void array_function(int array[m][n]); //Wrong!

但是,您也可以接受这些变量作为参数,或者硬编码您的数组和数组元素的长度 -

void array_function(int n, array[][n])         //Correct!
void array_function(int m, int n, array[m][n]) //Correct!

void array_function(int m, array[m][100]) //Correct!
void array_function(int n, array[100][n]) //Correct!

void array_function(int array[100][100]); //Correct!
void array_function(int array[100][100]); //Correct!

接受可变长度的数组-

To pass in a function with varying size (both length and element's length), you need to specify what the length and element's length are when you pass the array to the function. So your function prototype would look like this:

void array_function(int m, int n, array[m][n]) //Correct!

使用 C99 标准,您可以省略第一个大小变量,并允许未知长度的数组,但该数组中的每个数组都具有相同数量的元素 -

void array_function(int m, array[][m]) //Correct, with C99!  

但是对于您的代码,我不确定您为什么在函数中对值 100 进行硬编码。如果你打算接受数组并用它们的对角线做一些事情,我假设你只会得到方阵。你应该这样写你的函数:

void array_function(int size, array[size][size])

void array_function(int size, array[][size])

我推荐第一个选项,因为它清楚地表明您正在接受方阵。

关于c - 为什么我不能将二维数组传递给这个定义的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36578233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com