我尝试在不使用数组下标的情况下为内部产品编写函数。我一直在看代码几个小时。 我仍然无法修复错误。有人可以解决它吗?
for
答案 0 :(得分:0)
a和b必须是分配了内存的数组。
int a[1000];
int b[1000];
是一个快速修复,但最好是代码检查输入不大于1000(如果这只是一个类赋值,你可以在没有这样的检查的情况下逃脱,但生产代码需要更强大)。你不需要&调用函数前a
和b
之前,即调用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]
来获取数组值。
由于您的变量a
和b
是数组,因此您的内部产品应以这种方式计算:
for (i = 0; i < size; ++i)
sum += a[i] * b[i];
提示:请务必在致电a
后致电b
和free(a)
,以释放已分配的free(b)
和inner_product()
数组。
就是这样!