![]() |
|
| Правила Форума редакция от 22.06.2020 |
|
|||||||
|
|
Окажите посильную поддержку, мы очень надеемся на вас. Реквизиты для переводов ниже. |
|
![]() |
|
|
Опции темы | Опции просмотра |
Language
|
|
|
#1
|
|
Доброе Время Суток!
Помогите разобраться с указателями в BDS 2006 (С++) Имеем код: Код:
int B = 10; int *pB = &B; Имеем код2: Код:
int C = 20; int &rC = C; А как понимать этот код: Код:
int *pA = new int; *pA = 100;
__________________
Aliena vitia in oculis habemus, а tergo nostra sunt |
|
|
|
|
| Реклама: |
|
|
#2
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Новичок
Пол:
Регистрация: 04.12.2006
Сообщений: 8
Репутация: 1
|
*pB это указатель на адрес в оперативной памяти, в котором хранится значение переменной B. (*pB - это косвенное обращение к значению переменной через её адрес)
не совсем...
для указателя *pA выделить место в ДИНАМИЧЕСКОЙ памяти для записи значения целого типа. и записать в это место значение 100... потом из "любого места" (ну тоже не совсем коррекно) программы можно достать |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
#3
|
|||||||||||||||||||||||
А можно по подребнее касательно сылок. Т.е. любой процес может перезаписать этот участок памяти?
__________________
Aliena vitia in oculis habemus, а tergo nostra sunt Последний раз редактировалось SCUTUM; 07.12.2006 в 19:23.. |
||||||||||||||||||||||||
|
|
|
|
|
#4
|
|||||||||||||||||||||||
Естественно, НЕТ. Любая "уважающая себя" операционка этого не допустит. Все ниженаписанное относится к Windows (NT, 2000, XP) Когда запускается исполняемый файл, операционка создает окружение для него, в частности выделяет ему память - 4 Гига, виртуальных естественно. И обратиться к этой памяти может только этот процесс. Так вот в этой памяти есть область так называемой "кучи" (heap). В этой области можно создавать объекты/переменные, о количестве которых в процессе написания программы не имеешь представления. Например, геометрические фигуры в графическом редакторе. А вообще это основы. Переменная - это просто поименованный участок памяти, который, конечно, имеет свой адрес. Запись int a = 5; означает, что при компиляции программы в секции данных будет выделена память 4 байта с неким адресом и по этому адресу будет находиться число 5. int* a = new int; означает, что на момент компиляции будет выделена память под указатель на переменную типа int, но адрес этой переменной будет известен только на этапе выполнения и будет получен в "куче" оператором new. Вот. Может все сумбурно написал. Рихтер Вам поможет. ![]() |
||||||||||||||||||||||||
|
|
|
| Эти 2 пользователя(ей) сказали cпасибо за это полезное сообщение: |
|
|
#5
|
|
Неактивный пользователь
Регистрация: 17.01.2007
Сообщений: 2
Репутация: 0
|
erjf rjhf kjer kjerh keee
![]() |
|
|
|
|
|
#6
|
|
Неактивный пользователь
Пол:
Регистрация: 14.05.2007
Сообщений: 3
Репутация: 1
|
nt* a = new int;
означает, что на момент компиляции будет выделена память под указатель на переменную типа int, но адрес этой переменной будет известен только на этапе выполнения и будет получен в "куче" оператором new. Не совсет так. Память под указатель с именем а уже выделена на стеке процедуры. А вот оператор new выделяет память в куче для размещения переменной типа int и настраивает указатель а на этот адрес в памяти Не забывайте при выходе из функции освободить память в куче оператором delete |
|
|
|
| Сказали спасибо: |
|
|
#7
|
|
Неактивный пользователь
Регистрация: 23.05.2007
Сообщений: 1
Репутация: 0
|
Переменная есть, просто под нее динамическое выделение памяти.
|
|
|
|
|
|
#8
|
|
int *pA = new int; //тут ты выделяешь ДИНАМИЧЕСКИ память под переменную
*pA = 100; // а тут записывашь туда значение просто так использовть такую конструкцию нат смысла. обычно ее используют для организации динамических массивов. |
|
|
|
|
|
|
#9
|
|
Новичок
Пол:
Регистрация: 27.12.2006
Сообщений: 14
Репутация: 9
|
int *pA = new int;
*pA = 100; Данная конструкция динамически выделяет память размером Int (32bit) И в данную ячейка записывается число 100. Такая конструкция обычно используется при организации динамических массивов. Чем хороша данная конструкция в отличии от int A = 100; Она хороша тем что вы можете выделить память в нутри функции или метода класса и записать туда что угодно и после выхода из функции или метода класс данная ячейка все еще будет хранить значение. И его можно спокойно использовать. Последний раз редактировалось xkilax; 25.06.2007 в 15:53.. |
|
|
|
| Сказали спасибо: |
|
|
#10
|
|
Неактивный пользователь
Пол:
Регистрация: 18.07.2007
Сообщений: 20
Репутация: 7
|
Главное потом еще delete не забыть, а для массивов еще и delete[]
![]() |
|
|
|
|
|
#11
|
|
Неактивный пользователь
Регистрация: 27.12.2007
Сообщений: 1
Репутация: 0
|
Но еще лучше освоить стл-вский auto_ptr и vector
![]() |
|
|
|
![]() |
Похожие темы
|
||||
| Тема | Автор | Раздел | Ответов | Последнее сообщение |
| Помогите разобраться... | Shogun | Online/RPG | 14 | 27.04.2010 01:34 |
| Помогите разобраться | KUKLOVOD | Sony Ericsson | 2 | 14.12.2008 16:18 |
| помогите разобраться | djRomeo | Компьютерные проблемы | 5 | 01.08.2008 11:05 |
| Помогите разобраться! | Dimonssss | Компьютерное Железо | 4 | 08.07.2008 22:23 |
| Помогите разобраться | xchell | Архив | 3 | 17.01.2006 09:33 |
|
|