С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
Red Planet
49 / 10 / 2
Регистрация: 20.09.2009
Сообщений: 263
#1

Что и куда девается... - C++

14.11.2009, 21:19. Просмотров 1538. Ответов 25
Метки нет (Все метки)

Не очень хорошо знаю несколько вещей, а узнать хотелось бы очень.

Вопрос 1.
Локально объявленные переменные удаляются из памяти по окончании блока, так? Или же они где-то повисают, просто становясь недоступными?
Например.
C++
1
2
3
4
void main (void)
{
for (int a=0; a<8; a++) {/*код*/}
}
Переменная a удалилась по выходе из for или где-то "провисла"?

Вопрос 2.
Глобально объявленные переменные: каково их время жизни?
C++
1
2
3
4
5
int x;
void main (void)
{
//код
}
Получается, что переменная x живет "вечно" и везде доступна, так?

Вопрос 3.
Функции и указатели на функции, объявленные глобально и локально. Тот же самый вопрос про них: время их жизни.

P.S. Буду очень благодарен за ссылку на соответствующую статью про распределение памяти, понятную не особо продвинутому среднестатистическому студенту.

Товарищи крутые программеры, не злитесь, хочется выяснить раз и навсегда
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.11.2009, 21:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Что и куда девается... (C++):

Не понятно куда девается значение по указателю? - C++
Есть класс class base { int count*; public: base(int _c) { count = &amp;_c; }

Резкий выход из проги: куда девается выделенная переменной память? - C++
int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int...

Вложенные циклы. Что куда вложить? - C++
Здравствуйте, форумчане. Натолкните на мысль, пожалуйста. Есть такая задача: Написать программу, которая выводит на экран линию заданным...

Куда следует пойти туристам, что бы попасть на автобусную остановку? - C++
можете мне помочь с задачей. надо решить на С++ Туристы вышли из леса на шоссе неподалеку от километрового столба с отметкой А км и...

Есть 4 потока. После осуществления блокировки барьером, 3 куда-то деваются, куда? (pthreads) - C++
Друзья! Как мог упростил код, вот суть В цикле создаются 4 вспомогательных потока, кадый из которых в цикле же 2 раза выводит свой...

Куда записывается \0 - C++
#pragma hdstop #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #define eof 26 #define max 1000 getline(char s,int lim) { int c,i; ...

25
AnonymC
1173 / 455 / 28
Регистрация: 23.06.2009
Сообщений: 6,342
Завершенные тесты: 1
14.11.2009, 21:32 #2
Глобально объявленные переменные: каково их время жизни?
это так:
Получается, что переменная x живет "вечно" и везде доступна, так?
Цитата Сообщение от Red Planet Посмотреть сообщение
Товарищи крутые программеры, не злитесь, хочется выяснить раз и навсегда
форум как сказал на ВА создан не для крутых программеров,а для новичков,чтобы задавали вопросы,неважно какие вопросы

Добавлено через 1 минуту
Вопрос 1.
для этого сам пиши код
это твой код
C++
1
2
3
4
void main (void)
{
for (int a=0; a<8; a++) {/*код*/}
}
после фигурной закрывающейся скобки пиши такое
C++
1
cout<<i;
понятно для чего?
0
Red Planet
49 / 10 / 2
Регистрация: 20.09.2009
Сообщений: 263
14.11.2009, 21:51  [ТС] #3
C++
1
2
for (int a=0; a<5; a++) cout <<a;
cout <<a;
Пишет undifined symbol 'a'. Ясно, значит ни о какой переменной a после выхода из цикла, то есть за {} компилятор не знает, то есть она удаляется.
0
AnonymC
1173 / 455 / 28
Регистрация: 23.06.2009
Сообщений: 6,342
Завершенные тесты: 1
14.11.2009, 21:53 #4
Цитата Сообщение от Red Planet Посмотреть сообщение
Пишет undifined symbol 'a'. Ясно, значит ни о какой переменной a после выхода из цикла, то есть за {} компилятор не знает, то есть она удаляется.
да
0
Red Planet
49 / 10 / 2
Регистрация: 20.09.2009
Сообщений: 263
14.11.2009, 22:10  [ТС] #5
МедведЪ, а про функции (Вопрос 3) случайно не знаешь?
0
AnonymC
1173 / 455 / 28
Регистрация: 23.06.2009
Сообщений: 6,342
Завершенные тесты: 1
14.11.2009, 22:11 #6
Цитата Сообщение от Red Planet Посмотреть сообщение
Функции и указатели на функции, объявленные глобально и локально
до указателей я еще не дошел,но думаю тот же принцип,если гбальные то всегда если нет то нет
0
TanT
эволюционирую потихоньку
466 / 464 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
14.11.2009, 22:15 #7
Цитата Сообщение от МедведЪ Посмотреть сообщение
до указателей я еще не дошел,но думаю тот же принцип,если гбальные то всегда если нет то нет
именно, всё что объявленно в {} живёт и имеет смысл тока в этих {}
1
AnonymC
1173 / 455 / 28
Регистрация: 23.06.2009
Сообщений: 6,342
Завершенные тесты: 1
14.11.2009, 22:17 #8
C++
1
именно, всё что объявленно в {} живёт и имеет смысл тока в этих {}
спасибо,уяснил,я сомневался на счет циклов
0
victor_g
60 / 60 / 2
Регистрация: 09.11.2009
Сообщений: 198
14.11.2009, 22:24 #9
а функции - вообще нельзя объявлять локально
0
AnonymC
1173 / 455 / 28
Регистрация: 23.06.2009
Сообщений: 6,342
Завершенные тесты: 1
14.11.2009, 22:37 #10
Цитата Сообщение от victor_g Посмотреть сообщение
а функции - вообще нельзя объявлять локально
а кто их локально объявлял?Оо или я что то упустил
0
Даемоник
42 / 42 / 3
Регистрация: 22.05.2009
Сообщений: 97
14.11.2009, 22:47 #11
victor_g, почему же нельзя?
C++
1
2
3
4
5
6
int main()
{
   void function(){/*код функции*/}
   fuction();
   return 0;
}
Другой вопрос, целесообразна ли такая функция, но это уже на усмотрение каждого.
0
accept
4828 / 3249 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
15.11.2009, 08:12 #12
объявлять можно, определять нельзя

Цитата Сообщение от Red Planet
Функции и указатели на функции, объявленные глобально и локально.
указатель - переменная, которая хранит данные, которые являются адресом
переменная существует в том блоке, в котором создана
блоки могут быть вложенными
C
1
2
3
4
5
6
7
    int i;
    {
        int i;
        {
            int i;
        }
    }
это одноимённые разные переменные
глобальная переменная существует до завершения программы
1
Red Planet
49 / 10 / 2
Регистрация: 20.09.2009
Сообщений: 263
15.11.2009, 13:21  [ТС] #13
Цитата Сообщение от accept Посмотреть сообщение
объявлять можно, определять нельзя
А где ж их тогда определять, если они объявлены локально? Что-то я логику не понял... Поясните пожалуйста
0
Evg
Эксперт CАвтор FAQ
18383 / 6431 / 441
Регистрация: 30.03.2009
Сообщений: 17,850
Записей в блоге: 28
15.11.2009, 15:59 #14
Цитата Сообщение от Red Planet Посмотреть сообщение
А где ж их тогда определять, если они объявлены локально? Что-то я логику не понял... Поясните пожалуйста
Вложенных (а не "локальных") функций в Си нет. Они есть в паскале, алголе и прочих дремучих языках. Из всех разновидностей Си только GNU-C поддерживает вложенные процедуры. Что касается объявления - то объявление это просто уведомление компилятору, что где-то есть функция с таким-то именем и таким-то прототипом, поэтому объявление можно втыкать где угодно. Реально определена функция может быть, например, в другом файле или в библиотеке

Применительно к функциям используется термин "вложенный", а не "Локальный", потому что функция е создаётся и не удаляется, как это происходит с локальными переменными. Функция есть всегда, но "видна" для прямого вызова она только из той процедуры, в которой она определена (т.е. из "охватывающей" процедуры).

По поводу твоих первоначальных вопросов. По первым двум пунктам ответ "да". Правда термин "удаляется" немного некорректен, ну пусть будет "удаляется", для начального уровня это будет нормально. По поводу третьего вопроса: указатель на функцию является обычной переменной и ничем не отличается от любой переменной другого типа
1
victor_g
60 / 60 / 2
Регистрация: 09.11.2009
Сообщений: 198
15.11.2009, 18:34 #15
Цитата Сообщение от Red Planet Посмотреть сообщение
Вопрос 3.
Функции и указатели на функции, объявленные глобально и локально. Тот же самый вопрос про них: время их жизни.
->

Цитата Сообщение от Red Planet Посмотреть сообщение
Функции ..., объявленные глобально
- я как раз на это отвечал...
1
15.11.2009, 18:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.11.2009, 18:34
Привет! Вот еще темы с ответами:

Куда двинуться? - C++
Учусь на врача, программированием занимаюсь как хобби. Освоил книжку &quot;Моя первая программа на Си&quot;, пишу простые программы, пользуясь...

Куда дальше ? - C++
Хорошо освоил C++ STL Qt Win32 Api, но судя по всему для трудоустройства недостаточно . Куда дальше ? Мне говорили о возможности участия в...

Куда дальше? - C++
Ситуация такая: дошел до такого этапа что не знаю в каком направлении дальше развиваться! Большая часть тем рассматриваемая в этом разделе...

Куда передается управление - C++
Скажите если встречается тут break куда дпльше передается управление на какую строчку? int Matrix::CheckWord() { cout&lt;&lt;&quot;Enter...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.