Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
FishZone
2 / 2 / 0
Регистрация: 24.11.2016
Сообщений: 77
#1

Указатели и адреса: может кто-нибудь нормально по-человечески эту тему объяснить?

12.02.2017, 20:00. Просмотров 318. Ответов 13
Метки нет (Все метки)

Добрый вечер. Читаю вот книгу по Липманну и ничего не понимаю из этих слов, может кто нормально по-человечески объяснить? Спасибо.

Каждый указатель ассоциируется с некоторым типом данных, причем их внутреннее
представление не зависит от внутреннего типа: и размер памяти, занимаемый объектом
типа указатель, и диапазон значений у них одинаков5. Разница состоит в том, как
компилятор воспринимает адресуемый объект. Указатели на разные типы могут иметь
одно и то же значение, но область памяти, где размещаются соответствующие типы,
может быть различной:
• указатель на int, содержащий значение адреса 1000, направлен на область
памяти 1000-1003 (в 32-битной системе);
• указатель на double, содержащий значение адреса 1000, направлен на область
памяти 1000-1007 (в 32-битной системе)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.02.2017, 20:00
Ответы с готовыми решениями:

Кто-нибудь может подробно объяснить, что такое allocators, зачем это и что с ними делать? Нигде не нашёл инфы
Заранее спасибо.

не мог бы кто нибудь объяснить ошибку с темплейтами
Добрый день, (или вечер) не мог бы кто нибудь помочь разобраться с ошибкой с...

Кто может объяснить?
Кто может объяснить как это делать? Задание 1. В оперативной памяти вектор int...

Кто может объяснить a = a + b?
Сейчас разбирал функцию for. Но суть не в этом. Меня застопорило такое...

кто может объяснить синтаксис
кто может объяснить синтаксис при встрече в Барнауле, могу подъехать в любое...

13
Новичок
Модератор
1490 / 964 / 459
Регистрация: 17.07.2012
Сообщений: 4,918
Завершенные тесты: 3
12.02.2017, 20:07 #2
Цитата Сообщение от FishZone Посмотреть сообщение
указатель на int, содержащий значение адреса 1000, направлен на область
памяти 1000-1003 (в 32-битной системе)
int занимает 4 байта(в 32-битной системе, а вообще он может быть каким угодно)
И тогда если первый байт расположен по адресу 1000, то остальные три байта расположены по адресам 1001, 1002, 1003. И потому
Цитата Сообщение от FishZone Посмотреть сообщение
направлен на область
памяти 1000-1003
С double аналогично(в 32-битной системе он занимает 8 байт).
1
nd2
2835 / 2402 / 1057
Регистрация: 29.01.2016
Сообщений: 8,042
12.02.2017, 22:00 #3
Цитата Сообщение от FishZone Посмотреть сообщение
Каждый указатель ассоциируется с некоторым типом данных, причем их внутреннее
представление не зависит от внутреннего типа: и размер памяти, занимаемый объектом
типа указатель, и диапазон значений у них одинаков5.
То есть: вне зависимости от того, адрес какого типа данных содержится в указателе, сам указатель имеет один и тот же размер (например, в 32-х битных системах все указатели 4-х байтовые), и, соответственно, диапазон значений (адресов) у всех указателей одинаков.
1
Mournful Max
Велосипедист...
346 / 213 / 74
Регистрация: 15.12.2015
Сообщений: 784
Завершенные тесты: 1
12.02.2017, 22:27 #4
Ну смотри...
int, double, char и т.д. -- это типы данных.
> int хранит целое число;
> double -- вещественное;
> char -- символ.

* Для понимания:
int Value = 10; -- создали переменную, у которой есть свой адрес (пусть будет 0x0001), значение по этому адресу (10). Вывод: переменная имеет свой адрес и значение по этому адресу (в зависимости от типа).

А вот указатель любого типа (пусть то будет int или double, или любой другой тип) своим значение хранит адрес другой переменной.

int* ptrValue = &Value; -- создали переменную-указатель, которая ссылается на переменную Value. Вывод: переменная ptrValue (это наш указатель) имеет свой адрес (0x1104 к примеру), а значение по этому адресу -- другой адрес (адрес переменной Value(0x0001)).

Любой указатель занимает 4 байта (этого хватает, чтобы записать адрес). Так зачем указателю тип? Тип нужен для того, чтобы, когда происходит разыменование указателя, компилятор знал данные какого типа лежат по этому адресу, считав/записав данные правильно. Еще тип нужен для того, чтобы операции с указателями выполнялись безошибочно (это тоже большая отдельная тема).

Это очень большая тема, поймешь со временем. Пока только так
1
Renji
2102 / 1543 / 470
Регистрация: 05.06.2014
Сообщений: 4,472
12.02.2017, 23:43 #5
Цитата Сообщение от FishZone Посмотреть сообщение
Добрый вечер. Читаю вот книгу по Липманну и ничего не понимаю из этих слов, может кто нормально по-человечески объяснить?
У каждого объекта есть адрес. Даже если объект большой-прибольшой, адрес занимает восемь hex-цифр. В указателе записан этот адрес. И там всегда восемь hex-цифр, даже если указатель указывает на большой-прибольшой объект.
1
FishZone
2 / 2 / 0
Регистрация: 24.11.2016
Сообщений: 77
12.02.2017, 23:53  [ТС] #6
Спасибо всем большое, думаю пойму со временем
0
Nishen
13.02.2017, 06:30
  #7

Не по теме:

Цитата Сообщение от FishZone Посмотреть сообщение
Липманну
Липпман.

0
sourcerer
Модератор
Эксперт CЭксперт С++
4828 / 2020 / 314
Регистрация: 20.02.2013
Сообщений: 5,418
Записей в блоге: 24
Завершенные тесты: 1
13.02.2017, 18:15 #8
 Комментарий модератора 
FishZone, пожалуйста, прочитайте правила форума.
Особое внимание обратите на пункт 4.3 (порядок именования тем).

.
0
_stanislav
Рука
360 / 340 / 187
Регистрация: 16.08.2014
Сообщений: 1,535
Завершенные тесты: 2
13.02.2017, 18:26 #9
FishZone, почитай В. И. Юров ASSEMBLER, тогда лучше будешь представлять данную тему.
0
sourcerer
Модератор
Эксперт CЭксперт С++
4828 / 2020 / 314
Регистрация: 20.02.2013
Сообщений: 5,418
Записей в блоге: 24
Завершенные тесты: 1
13.02.2017, 19:08 #10
FishZone, почитай эту тему у Стивена Праты. Там прям ну очень подробно всё разжёвано.
0
Mournful Max
13.02.2017, 22:32
  #11

Не по теме:

gru74ik, Вам платят за рекламу Стивена Праты? :D

0
_stanislav
13.02.2017, 22:39
  #12

Не по теме:

Цитата Сообщение от Captain Maxee Посмотреть сообщение
Вам платят за рекламу Стивена Праты?
):)

0
sourcerer
Модератор
Эксперт CЭксперт С++
4828 / 2020 / 314
Регистрация: 20.02.2013
Сообщений: 5,418
Записей в блоге: 24
Завершенные тесты: 1
13.02.2017, 23:29 #13

Не по теме:

Цитата Сообщение от Captain Maxee Посмотреть сообщение
gru74ik, Вам платят за рекламу Стивена Праты?
Нет. Просто это единственная книга, которую я прочитал по программированию :D (шучу)



Добавлено через 52 секунды
FishZone, а ещё есть вот это.
.
0
altmax
181 / 48 / 19
Регистрация: 23.12.2016
Сообщений: 158
Завершенные тесты: 1
14.02.2017, 09:03 #14
https://www.youtube.com/playlist?lis...wp3pHdDAURShy0

Лекции чисто по указателям.
0
14.02.2017, 09:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.02.2017, 09:03

Нужна формула к этой задаче или кто сможет объяснить как решать эту задачу?
Есть два сосуда А и В. В сосуде А содержится 1 л молока, а в сосуде В - 1 л...

Кто может объяснить строку кода
class Node { public: int value; Node *left; Node *right; ...

Может кто перевести эту прогу,для codeblocks
#include "stdafix.h" #include <iostream> using namespace std; int...


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

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

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