Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.09.2013, 13:51   #1
Dimka-novitsek
Форумчанин
 
Аватар для Dimka-novitsek
 
Регистрация: 22.04.2013
Сообщений: 588
По умолчанию Динамичиская память, ссылки. Едва начал разбирать тему.

Выделение в динамичесую память как его написать и как оно происходит? Что это я пишу?

Пример из Либерти

Код:
Листинг 8.4. Выделение, использование и освобождение динамической памяти

1; // Листинг 8, 4,

2; // Выделение, использование и освобождение динамической памяти 3;

4: #include <iostream.h>

5: int main()

6: {

7:    int localVariable = 5;

8:    int * pLocal= &localVariable;

9:   10:   рНеар = 7;

11:   cout << "localVariable: " << localVariable << "\n";

12:   cout << "*pLocal: " << *pLocal << "\n";

13:   cout << "*pHeap; " << *pHeap << "\n";

14:   delete рНеар;

15:   рНеар = new int;

16:   pHeap = 9;

17:   cout << "*pHeap: " << *pHeap << "\n";

18:   delete рНеар;

19:   return 0;

20: }

Вопрос. Смотрите. Тут

int * pHeap = new int; pHeap это адрес по которому хранится переменная. Так зачем ему тип int? Что адрес может быть разных типов? Это же просто адрес. Иными словами, зачем инт с двух сторон присвоения? Можно стало быть думать, что в таком присвоении можно обьявить разный тип переменных? Что тогда будет?
Dimka-novitsek вне форума Ответить с цитированием
Старый 19.09.2013, 14:51   #2
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Dimka-novitsek
man адресная арифметика
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 19.09.2013, 15:06   #3
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

Цитата:
Сообщение от Dimka-novitsek Посмотреть сообщение
Выделение в динамичесую память как его написать и как оно происходит? Что это я пишу?

Пример из Либерти

Код:
Листинг 8.4. Выделение, использование и освобождение динамической памяти

1; // Листинг 8, 4,

2; // Выделение, использование и освобождение динамической памяти 3;

4: #include <iostream.h>

5: int main()

6: {

7:    int localVariable = 5;

8:    int * pLocal= &localVariable;

9:   10:   рНеар = 7;

11:   cout << "localVariable: " << localVariable << "\n";

12:   cout << "*pLocal: " << *pLocal << "\n";

13:   cout << "*pHeap; " << *pHeap << "\n";

14:   delete рНеар;

15:   рНеар = new int;

16:   pHeap = 9;

17:   cout << "*pHeap: " << *pHeap << "\n";

18:   delete рНеар;

19:   return 0;

20: }

Вопрос. Смотрите. Тут

int * pHeap = new int; pHeap это адрес по которому хранится переменная. Так зачем ему тип int? Что адрес может быть разных типов? Это же просто адрес. Иными словами, зачем инт с двух сторон присвоения? Можно стало быть думать, что в таком присвоении можно обьявить разный тип переменных? Что тогда будет?
Почитайте про оператор new
Igor95 вне форума Ответить с цитированием
Старый 19.09.2013, 15:35   #4
kineziz
Форумчанин
 
Регистрация: 22.12.2011
Сообщений: 378
По умолчанию

если вам не нравиться тип int*, то используйте void* и вручную приводите его к нужному типу, что в данном случае глупо
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.
kineziz вне форума Ответить с цитированием
Старый 19.09.2013, 15:56   #5
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Цитата:
Сообщение от Dimka-novitsek Посмотреть сообщение
Вопрос. Смотрите. Тут

int * pHeap = new int; pHeap это адрес по которому хранится переменная. Так зачем ему тип int? Что адрес может быть разных типов? Это же просто адрес. Иными словами, зачем инт с двух сторон присвоения? Можно стало быть думать, что в таком присвоении можно обьявить разный тип переменных? Что тогда будет?
Постараюсь в меру своих способностей объяснить.
Ключевое слово new - динамическое выделение памяти....
Вопрос, а сколько выделять памяти???? Для этого и используется int, т.е. к примеру 4 байта... Если например выделение памяти под массив
Код:
new int [5]
- будет выделено 20 байт. А указатель хранит адрес памяти от которой считать, грубо говоря 20 байт.. (5 элементов по 4 байта = 20). Тип говорит о том, сколько отмерять... в байтах. В общем вот так... Надеюсь понятно объяснил. Поправьте меня, если я ошибаюсь.
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!

Последний раз редактировалось Bugrimov; 19.09.2013 в 16:01.
Bugrimov вне форума Ответить с цитированием
Старый 19.09.2013, 15:58   #6
Dimka-novitsek
Форумчанин
 
Аватар для Dimka-novitsek
 
Регистрация: 22.04.2013
Сообщений: 588
По умолчанию

Нет, я не об этом. Спасибо! Зачем перед указателем, допустим int * pHeap
нужно вобще указывать какой-то тип?

О, спасибо!!!!!!! Читаю.

Спасибо! что-то проясняется.. приблизительно.

Последний раз редактировалось Stilet; 19.09.2013 в 22:39.
Dimka-novitsek вне форума Ответить с цитированием
Старый 19.09.2013, 21:34   #7
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

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


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ссылки, указатели, динамическая память, С++ TRIZER Помощь студентам 9 01.08.2013 16:54
Хочу ваш совет. разбирать чужой код (БД на Delphi) xxbesoxx Свободное общение 13 03.04.2013 12:13
Получить имя файла из ссылки(в конце ссылки нет имени файла) Человек_Борща Работа с сетью в Delphi 11 05.06.2011 15:15
создать тему в турбо-паскале на тему типизированные файлы O!e&ka! Паскаль, Turbo Pascal, PascalABC.NET 0 29.05.2011 11:42
Начал кодить на С++ So_Fever Общие вопросы C/C++ 5 24.07.2010 12:10