Форум программистов, компьютерный форум CyberForum.ru

Локальная переменная - C++

Восстановить пароль Регистрация
 
bgm313
12 / 12 / 2
Регистрация: 27.07.2012
Сообщений: 208
24.08.2012, 20:40     Локальная переменная #1
Если в функции объявляется символ,например так:

C++
1
2
3
4
5
char f(void){
  char ch;
  ch = getchar();
  return ch;
}
,то можно ли вернуть символ так, как это сделал я. ch уйдёт из области видимости эта ошибка?
Как тогда вернуть символ?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,161
Завершенные тесты: 1
24.08.2012, 20:56     Локальная переменная #2
Все в этом коде правильно.
По return ch; делается копия переменной ch,
которая и возвращается в качестве результата.
bgm313
12 / 12 / 2
Регистрация: 27.07.2012
Сообщений: 208
24.08.2012, 20:59  [ТС]     Локальная переменная #3
А если будет так:
C++
1
2
3
4
5
char *f(){
  char str[30];
  strcpy(str,"qwee");
  return str;
}
Так тоже верно?
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
24.08.2012, 21:19     Локальная переменная #4
А вы как думаете? Всё точно так же: делается копия указателя на массив, она передаётся наружу. А вот сам массив удаляется.
bgm313
12 / 12 / 2
Регистрация: 27.07.2012
Сообщений: 208
24.08.2012, 21:35  [ТС]     Локальная переменная #5
т.е. не верно?
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
24.08.2012, 21:40     Локальная переменная #6
Да, обращение по полученному указателю — undefined behavior.
Yandex
Объявления
24.08.2012, 21:40     Локальная переменная
Ответ Создать тему
Опции темы

Текущее время: 21:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru