我试图打印出我返回的总和的结果但是由于某种原因它打印出0,但是当我检查函数内部的总和时它正确地执行了它的目标。例如,如果我传入一个包含10个项目的数组,每个项目等于它们的索引(0 ... 9),则函数内的总和为45但是当我将它打印回main()时,它会打印0.我' m真的很困惑,至少可以说。
这是我的功能,我打电话使用:
printf("%d\n", addArray3(arrayA, 9, 0));
为了澄清,arrayA是一个指向10项整数数组的指针。
// Sums array using recursion
int addArray3(int (*arrayA)[], int n, int sum){
if (n<0){
return sum;
} else {
sum += (*arrayA)[n];
}
addArray3(arrayA, --n, sum);
}
如果有人能清楚这一点,我真的很感激,谢谢!
答案 0 :(得分:2)
你错过了最后一行的回报。编译所有警告,它可能会找到你。
关于此行为的相关问题,涵盖了此处发生的事情(没有回复):Implicit int return value of C function
答案 1 :(得分:0)
通过有效使用指针检查这个修改过的递归函数:
void addArray3(int *arrayA, int n, int* sum){
if (n<0){
return;
} else {
*sum += arrayA[n];
}
addArray3(arrayA, --n, sum);
}
int main ()
{
int ar[] = { 1, 2, 3};
int sum = 0;
addArray3(ar, 2, &sum);
printf("%d\n",sum);
return 0;
}
答案 2 :(得分:-1)
在这两种情况下,请尝试这样做:
1)将返回值存储在int t中。 或强>
2)直接打印返回值。
#include <stdio.h>
int main()
{
int a[10] = {0,1,2,3,4,5,6,7,8,9};
int t;
// t = addArray3(a,9,0);
// printf("%d\n",t);
printf("%d\n",addArray3(a,9,0));
}
int addArray3(int (*arrayA)[], int n, int sum)
{
if (n<0)
{
return sum;
}
else
{
sum += (*arrayA)[n];
}
addArray3(arrayA, --n, sum);
}