无法理解此功能定义

时间:2011-11-25 20:21:09

标签: c function

如何解释这个函数定义?我应该如何传递参数呢?

void matmul(float (*A)[N],int BlockX, int BlockY)

2 个答案:

答案 0 :(得分:4)

第一个参数是指向N元素数组的指针:

float a[N];
matmul(&a, 2, 3);

(注意N必须是C89和C ++中的编译时常量;在C89中,它必须是#define d作为一些文字值。在C99中你有可变长度阵列。)

由于数组衰减为指针,您也可以将其作为数组:

float b[M][N];
matmul(b, 2, 3);

答案 1 :(得分:1)

编写相同原型的另一种方法是

void matmul(float A[][N],int BlockX, int BlockY)

更好地显示了这通常应该接收的内容,一个二维数组,N

  • 编译时整数常量(不是const变量!)如果你只有C89
  • 任何可以在定义点评估的整数表达式,如果你有现代C99

未指定其他维度,您必须以某种方式知道或传输它。

在我看来,这个界面是一个古老的界面,因为它似乎使用int参数来传递大小信息。这样做的现代方法(并避免32/64位问题和类似的东西)将使用size_t这样的数量。

如果偶然两个参数对应于“真实”矩阵维度,在现代C中你的定义应该看起来像

void matmul(size_t m, size_t n, float A[m][n]) {
   ...
}

mnA之前变得非常重要,因为它们已经知道了。