我在写一个简单的测试程序来传递多维数组。我一直在努力获得被调用函数的签名。请帮助传递多维数组
的代码,我有:
void p(int (*s)[100], int n) { ... }
...
{
int s1[10][100], s2[10][1000];
p(s1, 100);
}
此代码似乎工作,但不是我的本意。我希望函数p忽略值的范围是100还是1000,但应该知道有10个指针(使用函数签名)。
作为第一个尝试:
void p(int (*s)[10], int n) // n = # elements in the range of the array
和作为第二:
void p(int **s, int n) // n = # of elements in the range of the array
但无济于事我似乎可以得到这些才能正常工作。我不想对签名中的100或1000进行硬编码,而是将其传入,请记住始终有10个数组。
很明显,我想避免声明函数:
void p(int *s1, int *s2, int *s3, ..., int *s10, int n)
通知你,我看答案a similar question但仍然感到困惑。
或者,'void p(int s [] [10],int n )' – outis 2010-04-05 06:20:54
@outis:非常正确。我部分使用了int(* s)[10]',因为我模仿了原始问题,也因为我个人倾向于避免像int s [] [10]这样的参数声明,因为它们误导读者了解实际内容被传递给该函数。 – 2010-04-05 06:21:02
谢谢戴尔。这看起来是实施我最初想要的方法的正确方法。唯一的问题是转置结构阻碍了我的代码。 看起来另一个建议动态构建多维数组,并且传入范围将更加合适和更清楚地理解。 – snap 2010-04-05 06:27:34