2014-10-05 84 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

相關問題