2014-10-05 90 views
2

我想找出使用​​递归和传递指针作为函数参数的数字阶乘。但是这个错误总是出现。 Debugers和编码器!我需要你的帮助。无效的操作数为二进制*(有'INT'和'INT *')

The code 

#include<stdio.h> 

int *factorial(int *); 
int value, p=0, q=1, x, tmp; 

void main() { 
int *result; 
    puts("Enter the value::"); 
    scanf("%d",&value); 

    result = factorial(&value); 
    printf("\nThe Result is::%d\n", *result); 
} 
int *factorial(int *n) { 
    if(*n == p || *n == q) { 
     return(&q); 
    } 
    else { 
     tmp = *n -1; 
     *n *= (factorial(&tmp)); 
     return(n); 
    } 
} 

The error: 
error: invalid operands to binary * (have ‘int’ and ‘int *’) 
    *n *= (factorial(&tmp)); 
+1

错误信息中的内容是不可理解的?你的左操作数是int,好,你的右操作数是int *,不好。你想如何将一个整数与一个指针相乘? – 2014-10-05 14:21:06

回答

5

这条线:

*n *= (factorial(&tmp)); 

应该

*n *= *(factorial(&tmp)); 

但是,要小心对待这个实现,因为它是递归的,但使用指针全局。

标准实施不适合你吗?

int factorial(int n) 
{ 
    if(n==0) 
     return 1; 
    else 
     return factorial(n-1)*n; 
} 

使用该标准,您需要提示用户输入非负值。

+0

Thankyour DNT先生,现在错误消失了。关于标准实现,我正在尝试开发使用C指针来更好地理解。 – 2014-10-05 14:21:35

+0

够公平的,祝你好运:) – DNT 2014-10-05 14:26:42

相关问题