2016-11-20 2 views
0

У меня есть функция, подобный этому, используя указатели в CНовичок в C - неправильный тип возвращаемого значения

float *compute_avg(float *array, int num_elements) { 
    float sum = 0.f; 
    int i; 
    for (i = 0; i < num_elements; i++) { 
    sum += array[i]; 
    } 
    return sum; 
} 

Но ошибка возникает «тип возвращаемого значения не соответствует типу функции».

+3

Ваш тип возврата 'float *', но вы пытаетесь вернуть 'float' - вы, вероятно, просто хотите исправить возвращаемый тип (удалите' * '). –

+4

OP: пожалуйста, не откатывайте конструктивные изменения - см. [Ask]. –

ответ

1

Это потому, что ваша функция возвращает float *, и вы пытаетесь вернуть float. Вы можете просто удалить *, чтобы изменить первую строку на float compute_avg(float *array, int num_elements)

Вы также можете объявить сумму как float *, а затем память malloc для нее. Затем вы должны использовать *sum += array[i];, но не позднее free.

+2

Использование динамического распределения для переменной суммы здесь не имеет никакого смысла. И вам нужно будет освободить его в какой-то момент. – Banex

+0

Очевидно, что изменение типа возвращаемой функции является лучшим решением, но использование указателя на сумму по-прежнему является решением, и я не вижу причин не использовать его. Поскольку автор вопроса ясно узнает о указателях, ему полезно знать альтернативы. Кроме того, поскольку вы упомянули об этом, я отредактирую ответ, чтобы добавить напоминание о высвобождении суммы, так что это будет еще более полезно для учащегося. – Behnken

Смежные вопросы