在C中使用指针的无效因子

时间:2015-02-07 20:55:12

标签: c

我想在C中使用指针来执行void factorial函数。这是我的代码,但它不会运行。

#include <stdio.h>
void factorial(int, int*);

int main()
{
    int n;
    int r = 0;

    printf("Enter n : ");
    scanf("%d", &n);

    if (n < 0)
    {
        printf("No factorial for negative");
    }
    else
    {
        factorial(n , &r);
        printf("factorial of %d is %d", n, r);
    }
}

void factorial(int n , int *r)
{
    if (n == 0 || n == 1)
    {
        *r= 1;
    }
    else
    {
        *r= n* factorial((n-1), r);
    }
}

我得到的错误是在代码的最后一行说:类型&#34; int&#34;的无效操作数。和&#34;无效&#34;到二元运算符*,这意味着什么以及如何解决它?

3 个答案:

答案 0 :(得分:1)

好吧,如果factorial()返回void(基本上没有返回任何内容),这一行没有任何意义

*result = num * factorial ((num-1), result);

答案 1 :(得分:0)

这是因为factorial()会返回void

尝试:

factorial((num-1), result);
*result= num *(*result);

而不是那条线。

答案 2 :(得分:0)

如果声明返回void,则不能使用函数的返回值。 如果你想以这种方式声明函数,那么你的阶乘函数可以是:

  void factorial(int num , int *result)
  {
  if (num == 0 || num == 1)
  {
    //*result = 1;
    return;
  }
  else
  {
      *result *= num;
      factorial ((num-1), result);
  }

但在main函数中,您应该将int res = 0更改为int res = 1