我正在设计一个涉及二维数组的C函数接口。 问题是,行维度是常量,第一列应该是用户定义的。
#define ROWS (65)
void init(int columns, float array[ROWS?][columns?])
{
...
}
void main()
{
float array1[ROWS][30];
float array2[ROWS][50];
init(30, array1);
init(50, array2);
}
如何设计一个能够将这种数组传递给函数的接口?
P.S。
不能以相反的方式做到这一点,其中列将是常量,因为必须使用一些想要它的第三个pary库。
答案 0 :(得分:4)
只需按照您在示例中所写的那样做
void init (size_t rows, size_t columns, float array[rows][columns])
然后您可以根据需要将编译时常量或运行时变量传递给函数。您还需要拥有当前千年(C99或更高版本)的C编译器。
答案 1 :(得分:3)
您在评论中提到c99。因此,近似你想要的东西不应该太难。事实上,你几乎就在那里。它看起来像这样:
#define ROWS 65
void init(int columns, float array[static ROWS][columns])
{
}
现在array
具有可变修改类型,columns
是用户定义的。 static ROWS
表示调用者必须传入至少65行的数组,否则将导致未定义的行为。这非常接近迫使他们尽可能地通过65
。