将[CONST] []数组传递给C函数?

时间:2018-05-04 10:49:34

标签: c c99

我正在设计一个涉及二维数组的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库。

2 个答案:

答案 0 :(得分:4)

只需按照您在示例中所写的那样做

void init (size_t rows, size_t columns, float array[rows][columns])

然后您可以根据需要将编译时常量或运行时变量传递给函数。您还需要拥有当前千年(C99或更高版本)的C编译器。

答案 1 :(得分:3)

您在评论中提到。因此,近似你想要的东西不应该太难。事实上,你几乎就在那里。它看起来像这样:

#define ROWS 65
void init(int columns, float array[static ROWS][columns])
{

}

现在array具有可变修改类型,columns是用户定义的。 static ROWS表示调用者必须传入至少65行的数组,否则将导致未定义的行为。这非常接近迫使他们尽可能地通过65