我试图自己弄清楚如何做阶乘,所以很杂乱,但是在某些方面我感到困惑。在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

因为xint中的mainint *中的fact,所以您只需将xfact内部传递到fact

当您使用*x访问intx中存储的fact时,应使用x获取指向该int的指针。

如果成功,请始终在函数的末尾return 1起作用,以便if(func())起作用。

附带说明,您可能应该returnfact内部进行递归调用的结果。

关于c - 为什么此阶乘函数不起作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56499138/

10-11 21:45