2014-10-05 5 views
2

재귀를 사용하여 숫자의 계승을 찾아서 포인터를 함수 인수로 전달하려고합니다. 그러나이 오류는 항상 나타납니다. 디버거 및 코더! 이걸로 당신의 도움이 필요합니다.2 진수 *에 대한 피연산자가 잘못되었습니다. ('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 *'입니다. 어떻게 integer에 포인터를 곱하고 싶습니까? –

답변

5

이 줄 :

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

는 그러나

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

수는 재귀이지만, 전역 포인터를 사용하기 때문에이 구현에주의해야합니다.

표준 구현이 효과가 없을까요?

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

표준에서는 음수가 아닌 값에 대해서만 사용자에게 메시지를 표시해야합니다.

+0

DNT 씨 감사합니다. 오류는 현재 사라졌습니다. 그리고 표준 구현에 관해서는 더 나은 이해를 위해 C 포인터를 사용하여 손을 개발하려고합니다. –

+0

충분히 공정하고 행운을 빕니다. – DNT