【发布时间】:2018-06-07 17:48:39
【问题描述】:
以下代码返回错误:Expression must have pointer-to-object 类型。不知何故,问题在于我引用参数 A、B 和 out 的方式,每个参数都指向一个二维数组。任何帮助将不胜感激。
目标是将两个数组相乘。
#include <stdio.h>
void matrixmul(const float *A, const float *B, int m, int n, int k, float *out)
{
float value = 0.0;
int x, y, z;
for (x = 0; x < k; x++) {
for (y = 0; y < m; y++) {
for (z = 0; z < n; z++) {
float product = A[y][z] * B[z][y];
value = value + product;
printf("%lf", value);
}
out[y][x] = value;
value = 0;
}
}
}
int main(void) {
float a[2][3] = {
{ 1.0,2.0,1.0 },
{ 3.0,4.0,1.0 }
};
float b[3][1] = {1, 2, 3};
float array[2][1];
matrixmul((float *) a, (float *) b, 2, 3, 1, (float *) array);
return 0;
}
【问题讨论】:
-
该函数不知道数组的维度,因此它不知道如何计算给定行和列的值的地址。有关如何使其工作的示例,请参阅此答案:stackoverflow.com/a/50726586/8513665
-
如果你发现自己在投射以避免警告/错误(例如
(float *) a)——你知道你做错了什么......a不是float *,它是@987654326 @。类型不兼容。
标签: c pointers multidimensional-array