Что именно делает возвращаемый тип в функции?

Что-то, чего я никогда не понимал и до сих пор не понимаю, что конкретно делает возвращаемый тип? Все в учебниках просто говорят, что void ничего не возвращает, а int возвращает int и т. д. Но что это значит? Куда возвращается? Кажется, я не понимаю, о чем все говорят, когда обсуждают функции.

, 👍1

Обсуждение

это то же самое, что объявить переменную как результат функции вместо жестко заданного литерала., @dandavis


2 ответа


4

Он возвращает его тому, на что назначена функция.

Возьмите функцию:

int plus(int a, int b) {
    return a + b;
}

Эта функция принимает два целых числа, складывает их и "возвращает" их как целое число.

Затем вы можете сделать следующее:

int c = plus(3, 4);
Функция

и c получит значение 7.

То же самое можно сделать:

Serial.println(plus(3, 4));

И функции Serial.println() будет передано значение 7 для печати.

Тип возвращаемого значения определяет тип данных, которые могут быть возвращены.

О, и void означает не "ничего не возвращает", а означает "ничего не возвращает". - что означает, что вы не можете присвоить его чему-либо, так как ничего не возвращается для назначения.

,

Чтобы добавить к «И функции Serial.println() будет передано значение 7 для печати». В частности, ей будет передано значение **int** 7, которое в конечном итоге приведет к выводу, отличному от других типов данных., @DataFiddler


1

Причина в том, что функция оценивается так же, как и любое другое выражение. Каждое выражение - `(x**x - 3*x + 5), например, - имеет значение и тип (если тип не является пустым, тогда оно не имеет значения или не определено), включая функции . Компилятору необходимо знать тип каждого элемента выражения, чтобы знать, как использовать этот элемент в операции (арифметической или другой). Иногда значение необходимо преобразовать из одного типа в другой, чтобы объединить с другим элементом или присвоить переменной, и компилятор знает только тип каждого элемента, как это сделать.

Вот пример:

float squareroot(float x); можно объявить функцию, которая принимает число с плавающей запятой и возвращает его квадратный корень как число с плавающей запятой. Если вы присвоите это значение интегралу переменной, компилятор должен убедиться, что функции возвращают не целое число, а число с плавающей запятой, поэтому он включает соответствующий код для преобразования числа с плавающей запятой в целое число (путем усечения дробной части, в данном случае). случай).

Если бы функция могла быть написана без объявления типа возвращаемого значения, компилятор не смог бы выполнить преобразование или даже узнать, понадобится ли оно.

,