我尝试为内部产品编写功能,但程序无法正常工作。 你能告诉我我的错误在哪里吗?
#include<stdio.h>
#include<stdlib.h>
int inner_product(const int *a, const int *b, int size)
{
int sum = 0, i;
for (i=0; i<size; ++i)
sum += *(a+i) * *(b+i);
return sum;
}
int main()
{
int n, a, b;
printf("How many elements do you want to store? ");
scanf("%d",&n);
printf("%d",inner_product(&a,&b,n));
system("pause");
return 0;
}
答案 0 :(得分:0)
刚开始:
主要:
int n, a, b; // a & b are not initialized
.
scanf("%d",&n); // Think what is the use of n here.
.
printf("%d",inner_product(&a,&b,n));
/* You passed address of a and b, this is OK but the value they
* store is indeterminate as per the standard
*/
在函数中
for (i=0; i<size; ++i)
sum += *(a+i) * *(b+i); // Accessing the memory out of bound for size>1 behavior is undefined
// Remember you have only two pointers which you can legally dereference ie a and b
答案 1 :(得分:0)
首先,应该初始化指针a,b以使该段代码正常工作。 您将它们作为“int”值引入。因此,这些“数组”的项目数为1,因此您不需要任何循环来计算总和。
除此之外,不使用像
这样的复杂结构会好得多*(a+i)
说:
更好(更易读)a[i]
代替。
此外,您的代码中可能存在溢出问题 - 如果输入了两个值(在[i]和b [i]中),产生大于“int”类型的和可以包含(超过2 ^ 32)? 您正在计算两个整数的总和为第三个整数而不进行任何检查。在生产软件中,它可能会导致安全漏洞。