如果我不知道尺寸,则将2d数组传递给函数

时间:2018-04-19 23:51:39

标签: c

我正在尝试编写一个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;
}

1 个答案:

答案 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');
    }
}