недопустимые операнды для двоичного * (имеют «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));

person Mrudav Shukla    schedule 05.10.2014    source источник
comment
Что в сообщении об ошибке непонятно? Ваш левый операнд — int, хорошо, ваш правый операнд — int*, плохо. Как бы вы хотели умножить целое число на указатель?   -  person Jens Gustedt    schedule 05.10.2014


Ответы (1)


Эта строка:

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

должно быть

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

однако будьте осторожны с этой реализацией, поскольку она рекурсивна, но использует указатели на глобальные переменные.

Стандартная реализация вам не подойдет?

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

Со стандартом вам нужно запрашивать у пользователя только неотрицательные значения.

person DNT    schedule 05.10.2014
comment
Спасибо, мистер DNT, ошибка на данный момент устранена. А что касается стандартной реализации, я пытаюсь разработать практическое использование указателей C для лучшего понимания. - person Mrudav Shukla; 05.10.2014