我正在尝试编写一个C函数来添加两个数组。该函数应该适用于任何数组大小,它应该接收对数组和行数以及列数的引用,它应该返回指向结果数组的第一个元素的指针。 我该怎么办?当我尝试将二维数组传递给函数时,我得到一个错误?
#include<stdio.h>
void function(int r, int c,int a[][]){
int i,j;
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
{
printf("%d, ",a[i][j]);
}
printf("\n");
}
}
int main(){
int array[2][2] = {{1,2},{4,5}};
function(2,2,array);
return 0;
}
答案 0 :(得分:5)
假设C99或C11具有未定义MinValue
的实现,您可以使用可变长度数组(VLA)表示法并且可以写:
__STDC_NO_VLA__
或等同于此的东西。必须先定义维度,然后才能在数组规范中使用它们。
如果您甚至无法访问C99编译器而只能访问C90编译器,则必须将指针传递给数组的第一个元素和大小,并明确执行数组索引计算。
void function(int r, int c, int a[r][c])
{
for (int i = 0; i < r; i++)
{
for (int j = 0; j < c; j++)
printf("%d, ", a[i][j]);
putchar('\n');
}
}
现在你调用这样的函数:
void function(int r, int c, int *a)
{
for (int i = 0; i < r; i++)
{
for (int j = 0; j < c; j++)
printf("%d, ", a[i * c + j]);
putchar('\n');
}
}