我不知道编译时的数组大小所以我声明了一个变量count并创建了一个数组arr [count] [count],我会在程序运行时删除这个count变量,我会在执行之前重新分配它的内存。但我无法创建一个采用此arr [count] [count]的函数。我怎样才能做到这一点 ?当我这样做时:
void add_friend(int friends[][*count], int p1, int p2)
{
}
编译器给出错误:在这里计算未声明。
答案 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)