C 为什么这个阶乘函数不起作用?
我试着自己想办法做一个阶乘,所以很混乱,但我对某些方面感到困惑,比如这个。在fact()中,我键入C 为什么这个阶乘函数不起作用?,c,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\
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
给出了位置,为什么我要在main中使用&x
,而在函数中只使用x
也不确定返回0或返回1是否是结束函数的正确方法。正如您所提到的:
fact(&x, j); //this is what i mean, remove the "&" and it works, but why?
这是将指向int*
的指针(或指向int
的指针)传递到事实
因为x
是main
中的int
和fact
中的int*
,所以您只需将x
从fact
中传递到fact
当您使用*x
访问fact
中x
中存储的int
时,您应该使用x
获取指向该int
的指针
如果函数成功,则始终在函数末尾返回1,以便if(func())
工作
作为旁注,您可能应该返回从事实中递归调用的结果函数的第一个参数是指向整数的指针,而指针是一个保存地址的变量,因此在调用函数时需要传递地址。这就是为什么要传递&x作为函数(&)给出变量的地址
另一方面,在函数内部,您有一个指针,其中包含指向整数的地址,因此,如果您希望遵从此指针,则应使用(*)在指针名称之前。这就是为什么只在函数内部使用x。更常见的是返回阶乘。x已经是事实内部的指针。x是指向一个指针的指针,它不是您想要的。这与x不同。在main中,x指的是main中声明为x的变量,即int。事实上是int*类型的参数x。请编译时启用警告。编译器非常擅长在事情不太正确时给出提示(如缺少返回语句…)简单的答案(除了缺少返回)&x
失败是因为函数已接收到指针。&x
是该指针的地址-指向指针的指针。指向int的指针与指向int的指针不同。欢迎使用C指针地狱。