为什么此阶乘函数不起作用?

时间:2019-06-07 17:52:11

标签: c

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

2 个答案:

答案 0 :(得分:0)

就在这里,正如您提到的:

fact(&x, j); //this is what i mean, remove the "&" and it works, but why?

这会将指向int *的指针(或指向int的指针)传递到fact

由于xint中是main,而在int *中是fact,因此您应该将x传递给{{1} },从fact开始。

当您使用fact访问*xint中存储的x时,应使用fact来获取指向该{ {1}}。

如果函数成功,则始终在函数的末尾x处使int有效。

作为旁注,您可能应该return 1if(func())进行递归调用的结果。

答案 1 :(得分:0)

您的函数的第一个参数是指向整数的指针,而指针是一个保存地址的变量,因此您在调用函数时需要传递地址。这就是为什么传递&x 用作( &)给出变量的地址


在函数内部,您有一个指针,其中保存一个指向整数的地址,因此,如果要引用该指针,则应在指针名称之前使用(*)。这就是为什么要使用 x 仅在函数内部。