C中的内积函数

时间:2016-05-05 19:56:44

标签: c

我尝试在不使用数组下标的情况下为内部产品编写函数。我一直在看代码几个小时。 我仍然无法修复错误。有人可以解决它吗?

for

2 个答案:

答案 0 :(得分:0)

a和b必须是分配了内存的数组。

int a[1000];
int b[1000];

是一个快速修复,但最好是代码检查输入不大于1000(如果这只是一个类赋值,你可以在没有这样的检查的情况下逃脱,但生产代码需要更强大)。你不需要&调用函数前ab之前,即调用inner_product(a, b, n)

答案 1 :(得分:0)

您的代码中有很多错误。首先,您不是将数组定义为数组,而是将其定义为单个int值。您应该正确定义它们:

int *a, *b;

其次,您没有分配数组。如果你想在运行时创建它们,你必须在获得它们的大小后使用malloc()

a = (int*)malloc(sizeof(int) * n);
b = (int*)malloc(sizeof(int) * n);

第三,没有必要将您的数组值作为参考传递,因为您不需要修改它们:

printf("%d", inner_product(a, b, n));

inner_product()功能中:

&(a + i)&(b + i)不会给出数组项的内存位置(因为它取决于内存块大小)。您应该使用&a[i]&b[i]来获取数组值。

由于您的变量ab是数组,因此您的内部产品应以这种方式计算:

for (i = 0; i < size; ++i)
    sum += a[i] * b[i];

提示:请务必在致电a后致电bfree(a),以释放已分配的free(b)inner_product()数组。

就是这样!