Другие языки программирования и технологии
Оператор return в СИ
При возвращении оператором return мы возвращаем ЗНАЧЕНИЕ переменной или САМУ переменную? Если саму то если мы переменную задали не глобально а в функции, мы с ней потом сможем работать в main()?
Оператор return возвращает то, что ты укажешь ему.
Оперируют в большинстве только со возвращаемым значением локальной переменной.
Можно вернуть и саму переменную, но... !
Если ты выходишь из функции, память выделенная под локальные переменные становиться недоступной (освобождается) и при обращение к ней ОС тебя выкинет с ошибкой. Поэтому с самой переменной обращаться бессмысленно.
Это будет понятно, когда дойдешь до указателей и взятие адресов.
int* z(){
    int a=10;
    return &a;
}
int main(){
    printf("%x\n",z()); //Адрес, который был у переменной
     int* p = z(); //При новом обращение адрес может быть и другой.
     printf("%x\n",p);
     //*p = 10; //попытка обращения к освобожденному адресу вызывает ошибку ОС в этой строке
    _getch();
}
P.S. Переменная имеет вид пары: (адрес : значение)
Оперируют в большинстве только со возвращаемым значением локальной переменной.
Можно вернуть и саму переменную, но... !
Если ты выходишь из функции, память выделенная под локальные переменные становиться недоступной (освобождается) и при обращение к ней ОС тебя выкинет с ошибкой. Поэтому с самой переменной обращаться бессмысленно.
Это будет понятно, когда дойдешь до указателей и взятие адресов.
int* z(){
    int a=10;
    return &a;
}
int main(){
    printf("%x\n",z()); //Адрес, который был у переменной
     int* p = z(); //При новом обращение адрес может быть и другой.
     printf("%x\n",p);
     //*p = 10; //попытка обращения к освобожденному адресу вызывает ошибку ОС в этой строке
    _getch();
}
P.S. Переменная имеет вид пары: (адрес : значение)
Мы возвращаем значение переменной, присваивая его имени функции.
С заданной в функции переменной в main мы можем работать только если создали ее в динамической памяти, конечно, при этом придется передать наружу любым из возможных способов и ее адрес.
С заданной в функции переменной в main мы можем работать только если создали ее в динамической памяти, конечно, при этом придется передать наружу любым из возможных способов и ее адрес.
Переменную нельзя вернуть. Возвращается в любом случае какое-то значение. Если нужно получить адрес переменной в памяти (например, записать туда что-то, чтобы изменить переменную) , то есть оператор &. Переменные, объявленные в функции, перестают существовать при выходе из функции.
return всегда возвращает значение (число) , тип этого значения определяется самой функцией из которого вызывается return.
http://en.wikipedia.org/wiki/Exit_status
http://en.wikipedia.org/wiki/Return_type
http://en.wikipedia.org/wiki/Exit_status
http://en.wikipedia.org/wiki/Return_type
Bekhzod Zakirov
Это неверно, и double, и вообще что угодно
Виталий Шевченко
return может вообще ничего не возвращать.
В "классическом" C всегда возвращается значение.
В C99 возможно возвращать значение референса, в некотором смысле - "самой переменной", соотв. в этом случае нельзя возвращать внутренние (временные) переменные, только статические.
Это если функция определена как-то так:
int& fun();
В C99 возможно возвращать значение референса, в некотором смысле - "самой переменной", соотв. в этом случае нельзя возвращать внутренние (временные) переменные, только статические.
Это если функция определена как-то так:
int& fun();
Акрам Абдыраимов
В C99 и C++
Переменная передаётся по значению. Потом нужно работать с той переменной, которой это значение присвоено во внешнем блоке кода.
Правда, сама переменная возвращается, если мы возвращаем массив, он передаётся по указателю.
Правда, сама переменная возвращается, если мы возвращаем массив, он передаётся по указателю.
Можно забабахать функцию. С ней будет переменная, а ретурн вернёт функции значение, которое мона будет юзать потом. Оч полезно
оператор 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
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
Похожие вопросы
- Что значит возвращает значение функции? для чего нужен оператор return в си? как он работает?
- Вопрос про оператор return в С++.
- Оператор return в c#.Зачем он нужен?
- Нужна помощь в понимание выражения return в Си на данном примере
- C++ кто может по простому объяснить куда и что вовращает оператор RETURN?
- ключевое слово return в языке Си
- Какой оператор в Си позволяет досрочно завершить ВСЕ циклы (например если цикл в цикле) или как это вообще можно сделать
- Что такое return. Объясните по простому, уже несколько статей и видеоуроков посмотрел, но так и не могу понять.
- Что такое return в c# помогите
- Для чего нужен return в C++ ?например return 0;