将二维动态数组传递给函数

时间:2014-01-07 01:15:22

标签: c arrays dynamic

我不知道编译时的数组大小所以我声明了一个变量count并创建了一个数组arr [count] [count],我会在程序运行时删除这个count变量,我会在执行之前重新分配它的内存。但我无法创建一个采用此arr [count] [count]的函数。我怎样才能做到这一点 ?当我这样做时:

void add_friend(int friends[][*count], int p1, int p2)
{

}

编译器给出错误:在这里计算未声明。

5 个答案:

答案 0 :(得分:0)

你不能直接做你要求的事,至少不能在C中做。但正如@millimoose建议的那样,如果你知道尺寸(可以作为整数传递),你可以做一点算术来弄清楚朋友在哪里[p1] [p2]是。如果每行有C个元素,那么你知道朋友[r] [0]从朋友的开头是C * r ints,并且可以将该行视为一个简单的int数组。

答案 1 :(得分:0)

count应该可以访问friends,为此,您可以将其声明为全局变量或函数的参数。

void add_friend(int count, int friends[][count], int p1, int p2)
{
    // ...
}

int main(void)
{
    int a[25][10];
    count = 10;
    add_friend(10, a);

    // ...        

    return 0;
}

答案 2 :(得分:0)

嗯,这是一种用c / c ++中的1维数组做你想要的方法:

void ff(int *arr_2d, int s1, int s2)
{
    for(int i=0;i<s1;i++ )
    {
        for(int j=0;j<s2;j++ )
            printf("f[%d][%d] = %d\t",i,j, *(arr_2d+i*s2+j));

        printf("\n");
    }
}

您可以将此功能用作:

int *f = new int[100];
int s1,s2;
s1 = s2 = 10;
for(int i=0; i<s1; i++)
    for(int j=0; j<s2; j++)
        *(f+i*s2+j) = (i*s2+j);

ff(f,10,10);

答案 3 :(得分:0)

在支持可变长度数组的C 1999和C 2011实现中,您可以这样声明一个函数:

void add_friend(int count, int friends[][count], int p1, int p2) …

答案 4 :(得分:0)

你可以这样做:

1.void add_friend(int count, int friends[count][count], int p1, int p2)
2.void add_friend(int count, int friends[][count], int p1, int p2)
3.void add_friend(int count, int (*friends)[count], int p1, int p2)