Разве невозможно передать адрес переменной в качестве аргумента рекурсивной функции, которая принимает целочисленные указатели? - PullRequest
0 голосов
/ 23 февраля 2020
#include <stdio.h>

int fact(int *num);

int main(void) {
    int num = 5;
    int result = fact(&num);

    printf("Factorial = %d", result);

    return 0;
}

int fact(int *num) {
    int factres;
    int numVal = *num;

    if (numVal == 1) {
        return 1;
    }

    factres = *num * fact(&numVal - 1);
    return factres;
}

Я учусь использовать указатели и функции в C и написал приведенный выше код, чтобы найти факториал числа. Насколько я могу судить, код кажется нормальным. Я объявил функцию с аргументами целочисленных указателей и определил ее ниже основной. Я передаю адрес переменной в вызове функции для расчета факториала. Куда я иду не так? Я получаю Factorial = 0 в качестве вывода.

1 Ответ

1 голос
/ 23 февраля 2020

Вы вычитаете из адреса numVal, но не из его значения. Используйте &--numVal вместо &numVal - 1 при вызове функции.

...