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 в СИ
Прототип функции на Википедии
Посмотрите статью на википедии про Прототип функции
Тип возвращаемого значения на Википедии
Посмотрите статью на википедии про Тип возвращаемого значения
 

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

Имя*

E-mail:*

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