return в си



Объявление функции в си

Автор Simon Carptur задал вопрос в разделе Другие языки и технологии

Оператор return в СИ и получил лучший ответ

Ответ от Алекс Красс[гуру]
Оператор return возвращает то, что ты укажешь ему.
Оперируют в большинстве только со возвращаемым значением локальной переменной.
Можно вернуть и саму переменную, но... !
Если ты выходишь из функции, память выделенная под локальные переменные становиться недоступной (освобождается) и при обращение к ней ОС тебя выкинет с ошибкой. Поэтому с самой переменной обращаться бессмысленно.
Это будет понятно, когда дойдешь до указателей и взятие адресов.
int* z(){
&nbsp&nbsp&nbsp&nbspint a=10;
&nbsp&nbsp&nbsp&nbspreturn &a;
}
int main(){
&nbsp&nbsp&nbsp&nbspprintf("%x
",z()); //Адрес, который был у переменной
&nbsp&nbsp&nbsp&nbsp int* p = z(); //При новом обращение адрес может быть и другой.
&nbsp&nbsp&nbsp&nbsp printf("%x
",p);
&nbsp&nbsp&nbsp&nbsp //*p = 10; //попытка обращения к освобожденному адресу вызывает ошибку ОС в этой строке
&nbsp&nbsp&nbsp&nbsp_getch();
}
P.S. Переменная имеет вид пары: (адрес : значение)

Ответ от Владимир Б.[гуру]
return всегда возвращает значение (число) , тип этого значения определяется самой функцией из которого вызывается return.

Ответ от Даниил Башмаков[гуру]
Переменная передаётся по значению. Потом нужно работать с той переменной, которой это значение присвоено во внешнем блоке кода.
Правда, сама переменная возвращается, если мы возвращаем массив, он передаётся по указателю.

Ответ от Krab Bark[гуру]
Мы возвращаем значение переменной, присваивая его имени функции.
С заданной в функции переменной в main мы можем работать только если создали ее в динамической памяти, конечно, при этом придется передать наружу любым из возможных способов и ее адрес.

Ответ от Капитан Гугл[гуру]
Переменную нельзя вернуть. Возвращается в любом случае какое-то значение. Если нужно получить адрес переменной в памяти (например, записать туда что-то, чтобы изменить переменную) , то есть оператор &. Переменные, объявленные в функции, перестают существовать при выходе из функции.

Ответ от Psevdonim[гуру]
В "классическом" C всегда возвращается значение.
В C99 возможно возвращать значение референса, в некотором смысле - "самой переменной", соотв. в этом случае нельзя возвращать внутренние (временные) переменные, только статические.
Это если функция определена как-то так:
int& fun();

Ответ от Only human[мастер]
оператор return возвращает _значение_ типа, указанного при объявлении функции, ни о каких переменных и речи не идет, нужно помнить о том, что возвращать указатели нужно на память выделенную в общей куче а не локально, т. е. нельзя возвращать указатели на локальные переменные функций .
int f1 () { return 1; } // ok
int f2 () { int x = 1; return x; } // ok
int* f3() { int x = 1; return &x; } // BAD
int* f4() { static x = 1; return &x; } // ok
int* f5() { int *x = (int*) malloc(sizeof(int)); return x; } // ok
int* f6() { int x[16]; x[0] = 1; return x; } // BAD
int* f7() { int *x = (int*)malloc(sizeof(int) * 16); x[0] = 1; return x; } // ok
речь я так понимаю про чистый C, далее сюда еще добавятся references, их поведение аналогично указателям в данном аспекте:
int& f8() { int x = 1; return x; } // BAD
int& f8() { static x = 1; return x; } // ok

Ответ от Вадим Парафенюк[гуру]
Можно забабахать функцию. С ней будет переменная, а ретурн вернёт функции значение, которое мона будет юзать потом. Оч полезно

Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с ответами на Ваш вопрос: Оператор return в СИ

что такое typedef struct в си? и для чего он нужен? какие у него функции и что будет без него?
>что такое typedef struct в си?
Объявление типа "структура".

>и для чего он
подробнее...
спросили в Static X
Что за ключевые слова extern и static в С++?
Вообще-то они еще в Си были.

extern - переменная где-то объявлена, но не в этой единице
подробнее...
спросили в Bell Labs Stdio h
Файловые функции из библиотек «fstream.h» и «stdio.h». вся информация о них???
stdio.h (от англ. standard input/output header — стандартный заголовочный файл ввода/вывода)
подробнее...

Задача по языку Си
Фактически, у вас задача на нахождение максимального элемента в последовательбности, только
подробнее...

[C++] Добавление .cpp-файлов в проект
это все называется проектированием. и делают так потому что это удобно.
например, если хранить
подробнее...
Ответ от 3 ответа[гуру]
Привет! Вот еще темы с похожими вопросами:

Как исправить эти ошибки в программе Си?
warning - не ошибка, а предупреждение. Программа с предупреждениями работать будет, но, возможно,
подробнее...
спросили в Canon OS X API
Для чего нужна библиотека <conio.h>?
conio.h (от англ. console input-output — консольный ввод-вывод) — заголовочный файл, используемый в
подробнее...
спросили в Static X
В каких случаях в Си надо использовать переменные static, а не глобальные переменные?
Если переменная объявлена как static,то компилятор выделяет ей как и глобальной переменной
подробнее...
спросили в C++ Stdio h
cout и printf в языке C
printf(\"%c\\n\", *ot);

> Компилятор не поддерживает функцию cout.
Какой
подробнее...

ЧТО ТАКОЕ ОПЕРАТОРЫ В ИНФОРМАТИКЕ ДОСТУПНО
То же, что и в алгебре.
Вот операторы: +, -*, /. Вы можете объяснить, что они
подробнее...
спросили в GIAT
В Turbo Pascal есть оператор перехода Goto, а в C++ чего вместо него имеется (+синтаксис)???
Использование оператора безусловного перехода goto в практике программирования на языке СИ
подробнее...
Прототип функции на Википедии
Посмотрите статью на википедии про Прототип функции
Тип возвращаемого значения на Википедии
Посмотрите статью на википедии про Тип возвращаемого значения
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*