Компьютерный форум NoWa.cc Здесь может быть Ваша реклама
Правила Форума
редакция от 22.06.2020
Форум .::NoWa.cc::.
Вернуться   Компьютерный форум NoWa.cc > В помощь вебмастеру > Программирование > Borland C++ Builder

Уважаемые пользователи nowa.cc. Мы работаем для вас более 20 лет и сейчас вынуждены просить о финансовой помощи по оплате за сервер.
Окажите посильную поддержку, мы очень надеемся на вас. Реквизиты для переводов ниже.
Webmoney Webmoney WMZ: Z021474945171 Webmoney WME: E159284508897 Webmoney WMUSDT: T206853643180
Кошелёк для вашей помощи YooMoney 4100117770549562
YooMoney Спасибо за поддержку!

Ответ
 
Опции темы Опции просмотра Language
Старый 28.11.2006, 09:15   #1
Неактивный пользователь
 
Аватар для SCUTUM
 
Регистрация: 15.09.2005
Адрес: Москва
Сообщений: 47
Репутация: 6
Question Помогите разобраться с указателями в BDS 2006 (С++)

Доброе Время Суток!
Помогите разобраться с указателями в BDS 2006 (С++)

Имеем код:
Код:
int B = 10;
int *pB = &B;
Тут всё ясно *pB это указатель на переменную B.

Имеем код2:
Код:
int C = 20;
int &rC = C;
Тут тоже ясно rC это ссылка на переменную C.

А как понимать этот код:
Код:
int *pA = new int;
*pA = 100;
Что указатель есть а переменной нет???
__________________
Aliena vitia in oculis habemus, а tergo nostra sunt
SCUTUM вне форума
 
Ответить с цитированием Вверх
Здесь может быть Ваша реклама
Здесь может быть Ваша реклама


Реклама:


Старый 04.12.2006, 20:48   #2
DemonaS
Новичок
 
Пол:Мужской
Регистрация: 04.12.2006
Сообщений: 8
Репутация: 1
По умолчанию Re: Помогите разобраться с указателями в BDS 2006 (С++)

Цитата:
Сообщение от SCUTUM Посмотреть сообщение
Доброе Время Суток!
Помогите разобраться с указателями в BDS 2006 (С++)

Имеем код:
Код:
int B = 10;
int *pB = &B;
Тут всё ясно *pB это указатель на переменную B.

*pB это указатель на адрес в оперативной памяти, в котором хранится значение переменной B. (*pB - это косвенное обращение к значению переменной через её адрес)
Цитата:
Имеем код2:
Код:
int C = 20;
int &rC = C;
Тут тоже ясно rC это ссылка на переменную C.

не совсем...
Цитата:
А как понимать этот код:
Код:
int *pA = new int;
*pA = 100;
Что указатель есть а переменной нет???

для указателя *pA выделить место в ДИНАМИЧЕСКОЙ памяти для записи значения целого типа. и записать в это место значение 100...
потом из "любого места" (ну тоже не совсем коррекно) программы можно достать
DemonaS вне форума
 
Ответить с цитированием Вверх
Старый 07.12.2006, 19:19   #3
SCUTUM
Неактивный пользователь
 
Аватар для SCUTUM
 
Регистрация: 15.09.2005
Адрес: Москва
Сообщений: 47
Репутация: 6
По умолчанию Re: Помогите разобраться с указателями в BDS 2006 (С++)

Цитата:
Сообщение от DemonaS Посмотреть сообщение
не совсем...

А можно по подребнее касательно сылок.

Цитата:
Сообщение от DemonaS Посмотреть сообщение
для указателя *pA выделить место в ДИНАМИЧЕСКОЙ памяти для записи значения целого типа. и записать в это место значение 100...
потом из "любого места" (ну тоже не совсем коррекно) программы можно достать

Т.е. любой процес может перезаписать этот участок памяти?
__________________
Aliena vitia in oculis habemus, а tergo nostra sunt

Последний раз редактировалось SCUTUM; 07.12.2006 в 19:23..
SCUTUM вне форума
 
Ответить с цитированием Вверх
Старый 12.12.2006, 16:08   #4
kvm
Неактивный пользователь
 
Аватар для kvm
 
Пол:Мужской
Регистрация: 09.12.2006
Адрес: Москва.
Сообщений: 39
Репутация: 19
По умолчанию Re: Помогите разобраться с указателями в BDS 2006 (С++)

Цитата:
Сообщение от SCUTUM Посмотреть сообщение
А можно по подребнее касательно сылок.
Т.е. любой процес может перезаписать этот участок памяти?

Естественно, НЕТ. Любая "уважающая себя" операционка этого не допустит.
Все ниженаписанное относится к Windows (NT, 2000, XP)
Когда запускается исполняемый файл, операционка создает окружение для него, в частности выделяет ему память - 4 Гига, виртуальных естественно. И обратиться к этой памяти может только этот процесс. Так вот в этой памяти есть область так называемой "кучи" (heap). В этой области можно создавать объекты/переменные, о количестве которых в процессе написания программы не имеешь представления. Например, геометрические фигуры в графическом редакторе.

А вообще это основы. Переменная - это просто поименованный участок памяти, который, конечно, имеет свой адрес.
Запись
int a = 5;
означает, что при компиляции программы в секции данных будет выделена память 4 байта с неким адресом и по этому адресу будет находиться число 5.

int* a = new int;
означает, что на момент компиляции будет выделена память под указатель на переменную типа int, но адрес этой переменной будет известен только на этапе выполнения и будет получен в "куче" оператором new.

Вот. Может все сумбурно написал. Рихтер Вам поможет.
kvm вне форума
 
Ответить с цитированием Вверх
Эти 2 пользователя(ей) сказали cпасибо за это полезное сообщение:
Старый 19.04.2007, 17:01   #5
Dobriy82
Неактивный пользователь
 
Регистрация: 17.01.2007
Сообщений: 2
Репутация: 0
По умолчанию Re: Помогите разобраться с указателями в BDS 2006 (С++)

erjf rjhf kjer kjerh keee
Dobriy82 вне форума
 
Ответить с цитированием Вверх
Старый 16.05.2007, 11:31   #6
Yaric
Неактивный пользователь
 
Пол:Мужской
Регистрация: 14.05.2007
Сообщений: 3
Репутация: 1
По умолчанию Ответ: Помогите разобраться с указателями в BDS 2006 (С++)

nt* a = new int;
означает, что на момент компиляции будет выделена память под указатель на переменную типа int, но адрес этой переменной будет известен только на этапе выполнения и будет получен в "куче" оператором new.

Не совсет так.
Память под указатель с именем а уже выделена на стеке процедуры.
А вот оператор new выделяет память в куче для размещения переменной типа int и настраивает указатель а на этот адрес в памяти
Не забывайте при выходе из функции освободить память в куче оператором delete
Yaric вне форума
 
Ответить с цитированием Вверх
Старый 23.05.2007, 01:23   #7
qweqqer
Неактивный пользователь
 
Регистрация: 23.05.2007
Сообщений: 1
Репутация: 0
По умолчанию Ответ: Помогите разобраться с указателями в BDS 2006 (С++)

Переменная есть, просто под нее динамическое выделение памяти.
qweqqer вне форума
 
Ответить с цитированием Вверх
Старый 08.06.2007, 06:37   #8
mboarder
Неактивный пользователь
 
Аватар для mboarder
 
Пол:Мужской
Регистрация: 03.06.2007
Сообщений: 21
Репутация: 9
По умолчанию Ответ: Помогите разобраться с указателями в BDS 2006 (С++)

int *pA = new int; //тут ты выделяешь ДИНАМИЧЕСКИ память под переменную
*pA = 100; // а тут записывашь туда значение

просто так использовть такую конструкцию нат смысла. обычно ее используют для организации динамических массивов.
mboarder вне форума
 
Ответить с цитированием Вверх
Старый 25.06.2007, 15:48   #9
xkilax
Новичок
 
Пол:Мужской
Регистрация: 27.12.2006
Сообщений: 14
Репутация: 9
По умолчанию Ответ: Помогите разобраться с указателями в BDS 2006 (С++)

int *pA = new int;
*pA = 100;

Данная конструкция динамически выделяет память размером Int (32bit)
И в данную ячейка записывается число 100. Такая конструкция обычно используется при организации динамических массивов.
Чем хороша данная конструкция в отличии от int A = 100;

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

Последний раз редактировалось xkilax; 25.06.2007 в 15:53..
xkilax вне форума
 
Ответить с цитированием Вверх
Старый 30.10.2007, 12:07   #10
AlexYankee
Неактивный пользователь
 
Пол:Мужской
Регистрация: 18.07.2007
Сообщений: 20
Репутация: 7
По умолчанию Ответ: Помогите разобраться с указателями в BDS 2006 (С++)

Главное потом еще delete не забыть, а для массивов еще и delete[]
AlexYankee вне форума
 
Ответить с цитированием Вверх
Старый 03.01.2008, 11:34   #11
vic_ing
Неактивный пользователь
 
Регистрация: 27.12.2007
Сообщений: 1
Репутация: 0
По умолчанию Ответ: Помогите разобраться с указателями в BDS 2006 (С++)

Но еще лучше освоить стл-вский auto_ptr и vector
vic_ing вне форума
 
Ответить с цитированием Вверх
Ответ


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите разобраться... 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

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 09:03. Часовой пояс GMT +3.


Copyright ©2004 - 2025 NoWa.cc

Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2026, vBulletin Solutions, Inc. Перевод: zCarot
Время генерации страницы 0.06544 секунды с 11 запросами