我试图弄清楚自己如何做阶乘,所以很杂乱,但在某些方面我感到困惑。在fact()中,我输入fact(x,j)
。这可行。但是,我最初尝试的fact(&x,j)
无效。这是为什么?后一个参数不起作用,因为我正在发送x的地址,该地址已经在*x = (*x)*j;
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是结束函数的正确选择。
答案 0 :(得分:0)
就在这里,正如您提到的:
fact(&x, j); //this is what i mean, remove the "&" and it works, but why?
这会将指向int *
的指针(或指向int
的指针)传递到fact
。
由于x
在int
中是main
,而在int *
中是fact
,因此您应该将x
传递给{{1} },从fact
开始。
当您使用fact
访问*x
中int
中存储的x
时,应使用fact
来获取指向该{ {1}}。
如果函数成功,则始终在函数的末尾x
处使int
有效。
作为旁注,您可能应该return 1
内if(func())
进行递归调用的结果。
答案 1 :(得分:0)
您的函数的第一个参数是指向整数的指针,而指针是一个保存地址的变量,因此您在调用函数时需要传递地址。这就是为什么传递&x 用作( &)给出变量的地址
在函数内部,您有一个指针,其中保存一个指向整数的地址,因此,如果要引用该指针,则应在指针名称之前使用(*)。这就是为什么要使用 x 仅在函数内部。