如何解释这个函数定义?我应该如何传递参数呢?
void matmul(float (*A)[N],int BlockX, int BlockY)
答案 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 未指定其他维度,您必须以某种方式知道或传输它。
在我看来,这个界面是一个古老的界面,因为它似乎使用int
参数来传递大小信息。这样做的现代方法(并避免32/64位问题和类似的东西)将使用size_t
这样的数量。
如果偶然两个参数对应于“真实”矩阵维度,在现代C中你的定义应该看起来像
void matmul(size_t m, size_t n, float A[m][n]) {
...
}
m
和n
在A
之前变得非常重要,因为它们已经知道了。