我试图自己弄清楚如何做阶乘,所以很杂乱,但是在某些方面我感到困惑。在fact()中,键入fact(x,j)
。这可行。但是,我最初尝试使用fact(&x,j)
无效。这是为什么?后一个参数不起作用,因为我正在发送x的地址,该地址已经在*x = (*x)*j;
中设置为n * n-1
int main(void)
{
int x =0;
scanf("%d", &x);
int j =x;
fact(&x, j);
printf("%d\n", x);
scanf("%d", &x);
}
int fact(int *x, int j)
{
if(j!=1)
{
j = j-1;
*x = (*x)*j;
printf("j is : %d\n", j);
fact(&x, j); //this is what i mean, remove the "&" and it works, but why?
} else if(j==1)
{
return 0;
}
}
如果
x
是指针,并且&x
给出了位置,为什么我在函数内部使用&x
但在函数内部仅使用x
?也不确定返回0或返回1是结束函数使用的正确方法。
最佳答案
正如您提到的,就在这里:
fact(&x, j); //this is what i mean, remove the "&" and it works, but why?
这会将指向
int *
的指针(或指向int
的指针的指针)传递给fact
。因为
x
是int
中的main
和int *
中的fact
,所以您只需将x
从fact
内部传递到fact
。当您使用
*x
访问int
内x
中存储的fact
时,应使用x
获取指向该int
的指针。如果成功,请始终在函数的末尾
return 1
起作用,以便if(func())
起作用。附带说明,您可能应该
return
从fact
内部进行递归调用的结果。关于c - 为什么此阶乘函数不起作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56499138/