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

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

Войти
Регистрация
Восстановить пароль
 
Kristinochka
0 / 0 / 0
Регистрация: 04.02.2013
Сообщений: 3
#1

Переменные в c++ - C++

04.02.2013, 19:32. Просмотров 641. Ответов 8
Метки нет (Все метки)

Помогите разобраться в теории. Так вот допустим мы создаем переменную в стеке
C++
1
int a;
тогда в стеке где то по адресу скажем 004 выделяется 4 байта в которые записывается переменная в двоичном коде.
Фррр а вот теперь вопрос а где храниться сам адрес 004 , откуда программа знает что переменная храниться в этом адресе? она что где то его сохраняет ?а если мы где то храним адрес то как мы узнаем где мы его храним? а размер переменной где храниться????
И вот еще вопрос , допустим берем
C++
1
2
3
4
5
class uf
{
int a;
int b;
}
как компилятор знает что класс состоит из двух переменных ведь в оперативной памяти просто сохраняется размер и начало ?или как?
Если непонятно пишу вы горите я обещаю исправить!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.02.2013, 19:32
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Переменные в c++ (C++):

Создать программу обработки массивов структур используя структурные переменные и переменные типа объеденения - C++
Создать массив структур, каждая из которых состоит из следующих елементов: факультет, курс, группа, фамилия студента и екзаменационная...

Переменные,значение функции,вспомогательные переменные. - C++
1)Даны переменные A,B,C.Изменить их значения,переместив их содержимое из A-в B,B-в C,C-в A,и вывести новые значения переменных A,B,C. ...

Создать бинарное дерево, по правой ветке - переменные типа инт, по левой - 2 переменные типа чар - C++
Здравствуйте. Необходимо создать бинарное дерево, по правой ветке - переменные типа инт, по левой - 2 переменные типа чар. ругается в...

Переменные - C++
system( "/*Как нибудь можно здесь использовать переменные типов STRING или CHAR?*/" );

Переменные - C++
Всем привет, я знаю есть много неизвестного для меня в перменных, есть типы int, float, char, string, bool, но я так же слышал про другие,...

Переменные - C++
Вот есть переменная: float x=100.0f Что значит в конце буква f ?

8
Troll_Face
602 / 402 / 4
Регистрация: 26.04.2012
Сообщений: 2,070
04.02.2013, 19:46 #2
Цитата Сообщение от Kristinochka Посмотреть сообщение
тогда в стеке где то по адресу скажем 004 выделяется 4 байта в которые записывается переменная в двоичном коде.
не обязательно в стеке. компилятор знает где он создает память для переменных и подставляет их адреса, т.е. не "мы" знаем адреса, а компилятор.
Цитата Сообщение от Kristinochka Посмотреть сообщение
как компилятор знает что класс состоит из двух переменных ведь в оперативной памяти просто сохраняется размер и начало ?или как?
компилятор знает и адрес начала и адрес конца и сколько переменных и какие они и т.д. обо всем этом заботится компилятор

Добавлено через 54 секунды
знаешь что такое отладчик? типа олли дебагера? вот можешь открыть любую прогу в нем, там только адреса, т.е. они не беруться от куда-нибудь, а сразу стоят в коде
0
Kristinochka
0 / 0 / 0
Регистрация: 04.02.2013
Сообщений: 3
04.02.2013, 19:50  [ТС] #3
Я еще больше запуталась !!! но ведь операционная система сама выбирает адреса в процессе работы? разве нет?
0
HardLogin
52 / 52 / 1
Регистрация: 20.01.2013
Сообщений: 800
Записей в блоге: 1
04.02.2013, 19:59 #4
а не легче забить это работа компилира а не наша
1
Nick Alte
Эксперт С++
1642 / 1014 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
04.02.2013, 19:59 #5
Если мы говорим о стеке, то эти адреса отсчитываются как смещение от начала стека, которое было на момент запуска функции. Хотя само начало может быть разным в разных случаях, но сами смещения постоянны.
1
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
04.02.2013, 20:05 #6
http://habrahabr.ru/post/128991/
1
HardLogin
52 / 52 / 1
Регистрация: 20.01.2013
Сообщений: 800
Записей в блоге: 1
04.02.2013, 20:08 #7
Цитата Сообщение от Nick Alte Посмотреть сообщение
Если мы говорим о стеке, то эти адреса отсчитываются как смещение от начала стека, которое было на момент запуска функции. Хотя само начало может быть разным в разных случаях, но сами смещения постоянны.
мой мозг!
1
Troll_Face
602 / 402 / 4
Регистрация: 26.04.2012
Сообщений: 2,070
04.02.2013, 20:16 #8
HardLogin, вобщем не вдумывайся в следующую фразу, просто прими как она есть: все смещение в коде даются относительными. т.е. куда бы мы не зугрузили нашу прогу (хоть в нулевой адрес, хоть в 100500-й, смещения будут относительно этого адреса). вот пример: смещение переменной в коде 1000h, загружена прога по адресу 5000000h, тогда "физический" адрес переменной будет 5001000h

Добавлено через 2 минуты
HardLogin, вы с ассемблером не знакомы? хоть чуть-чуть?
1
Kristinochka
0 / 0 / 0
Регистрация: 04.02.2013
Сообщений: 3
04.02.2013, 20:24  [ТС] #9
более менее поняла , спасибо большое!
0
04.02.2013, 20:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.02.2013, 20:24
Привет! Вот еще темы с ответами:

Переменные - C++
Есть глобальная переменная, внутри описания функции я ее меняю ( ну то есть пишу b=i;); После вызова этой функции, другая функция будет...

Константы, переменные - C++
Отпишите пожалуст с начала до конца что происходит в этой программе =) void main() { //Описание переменных целого типа ...

Глобальные переменные - C++
Подскажите пожалуйста, почему данные в глобальной переменной перезаписываются, а не плюсуются? Пример: int peremennaya; void...

Строковые переменные - C++
Дали посмотреть код. Помогите, пожалуйста, разобраться со строковыми переменными. Тотальная путаница с LPCWSTR/const char/char. Программа...


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

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

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