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

маленький простенький вопросик... - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Помогите справится с ошибочкой http://www.cyberforum.ru/cpp-beginners/thread367303.html
Обычная реализация дека. Само по себе работает. Странно то, что если добавлять и удалять по одному элементу, как я записал, то программа вылетает с ошибкой. Как это исправить? #include <iostream> using namespace std; class Dek { private: int *mem,*head; int size,maxsize;
C++ Задачи с массивами и символьными строками Задание 1 В прямоугольной матрице, размерностью n*m, найти номера первых отрицательных элементов каждой строки (столбца). Задание 2 Заданы 2 массива по N целых чисел. Найти наименьшее среди чисел 1-го массива, которое не входит во 2-ой массив (считая, что такое число есть). Задание 3 В строке символов поменять местами символы на четных и нечетных позициях. http://www.cyberforum.ru/cpp-beginners/thread367297.html
C++ Перевод десятичного числа в двоичное
Доброго времени суток всем. Программа выполняет перевод десятиричного числа в двоичное, если остаток от деления a%b==0; записывает что b (в динамическом массиве p) равно нулю, если операция выполнялась в первый раз то b=b, и так попорядку. n в данном случае равно 2, то есть если мы представляем число 6 как 110, то b=0; b=1; b=1; два динамических массива создаются с целью того, чтобы потом...
STL :: map C++
Столкнулся с такой проблемой: Нужно вставить в отсортированную map-таблицу элемент. Использую: myMap.insert(myIterator,pair<type1, type2>(val1,val2) ); \\Итератор указывает на тот элемент, за место которого нужно было вставить новый элемент Но во время отладки увидел что insert добавляет все в конец таблицы, хотя нужно было в середину. Может я как бы не правильно использовал функцию, ...
C++ Идеальное хеширование http://www.cyberforum.ru/cpp-beginners/thread367282.html
Суть вопроса заключается вот в чем. В методичке по лабораторным рассказывается про идеальное хеширование. Идеальное хеширование Чаще всего хеширование используется из-за превосходной средней производительности, возможна ситуация, когда реально получить превосходную производительность хеширования в наихудшем случае. Такой ситуацией является статическое множество ключей, т.е. после того как...
C++ Дано 10 чисел, вводимых с клавиатуры. найти два крупнейших числа и их номера есть 10 чисел вводимых с клавиатуры. найти два крупнейших числа и их номера. int poz1, poz2, max1,max2;// using namespace std; cout<<"vvedit 10 chusel: \n"; max1=max2=0; cin >> b; if(b>max1) {max1 = b; poz1=1; poz2=2;} cin >> c; if(c>max1) {max2 = max1; max1 = c; poz2=2; poz1=1;} cin >> d; подробнее

Показать сообщение отдельно
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,302
18.10.2011, 03:28     маленький простенький вопросик...
Переменные. которые ты объявляешь таким образом создаются в процессе выполнения программы.
Они "кладутся" в область памяти, называемую стеком. Стек состоит из ячеек, каждая ячейка пронумерована.
Теоретически любой программе может быть выделено 4 гигабайта оперативной памяти под разные нужды, часть из них под стек (читай: под эти самые твои a, b и с)

Предположим, что стек имеет 20 ячеек. Первая ячейка имеет адрес 131, последняя (учитывая размер стека 20 имеет адрес 150). Вся остальная память занята под что угодно. Ячейка с нижним адресом (131) это начало стека, верхняя (150)- вершина стека (вершина всегда должна быть больше начала)

ВСЕ ДАННЫЕ КЛАДУТСЯ ТОЛЬКО НА ВЕРШИНУ СТЕКА. ПОСЛЕ КАЖДОГО СОЗДАНИЯ ДАННЫХ АДРЕС ВЕРШИНЫ СТЕКА МЕНЯЕТСЯ В МЕНЬШУЮ СТОРОНУ.

Итак, переда началом выполнения функции вершина стека имеет адрес 150. В ней может находиться что угодно.

Функция начала выполняться; то есть в ней создались данные и чё-то там делается внутри этой функции. Это значит, что в ячейке с номером 150 лежит переменная a, в ячейке с номером 149 лежит переменная b, в ячейке с номером 148 лежит переменная c. Если бы у этих переменных были значения (например, 1, 2, 3), то по этим адресам лежало бы 1, 2 и 3. А если они не проинициализированы, то по этим даным лежит мусор.

Вопрос: где щас вершина стека? Ответ: в ячейке N148

Вопрос:
Допустим, твоя функция f_1 вызывает какую-нибудь функцию f_2, которая таким же макаром объявляет переменные d и e. По каким адреса лягут переменные функции f_2? Ответ: они лягут на вершину стека, то есть по адресу N 148 и 147.

Вопрос: что будет если мы так, вызывая функцию за функцией дойдём до начала стека? Ответ: крах программы (рекурсивные функции тем и плохи, что требуют большого стека.)

Вопрос: допустим, функция f_2 отработала. Где щас вершина стека? Ответ: умный компилятор позаботился о том, чтобы вершиной стека стала снова ячейка N148, как и было ДО ВЫЗОВА функции f_2

Вопрос: когда f_2 закончит свою работу, что окажется по адресам 148, 147 и так далее?
Ответ: наверное, ты хотел спросить, куда денутся переменные, которые лежали по этим адресам? Ответ: там и будут лежать, никуда они не денутся. Может, они были изменены в процессе выполнения f_2. Важно то, что к этим ячейкам просто доступа нет, а так они никуда не делись, лежат себе.

Вот и всё. Если чё- иди на wasm в "исследование программ", там всё поймёшь

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