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

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

12.02.2017, 20:00. Просмотров 309. Ответов 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
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Указатели и адреса: может кто-нибудь нормально по-человечески эту тему объяснить? (C++):

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

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

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

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

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

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

13
Новичок
Модератор
1482 / 949 / 457
Регистрация: 17.07.2012
Сообщений: 4,888
Завершенные тесты: 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
2828 / 2398 / 1052
Регистрация: 29.01.2016
Сообщений: 8,022
12.02.2017, 22:00 #3
Цитата Сообщение от FishZone Посмотреть сообщение
Каждый указатель ассоциируется с некоторым типом данных, причем их внутреннее
представление не зависит от внутреннего типа: и размер памяти, занимаемый объектом
типа указатель, и диапазон значений у них одинаков5.
То есть: вне зависимости от того, адрес какого типа данных содержится в указателе, сам указатель имеет один и тот же размер (например, в 32-х битных системах все указатели 4-х байтовые), и, соответственно, диапазон значений (адресов) у всех указателей одинаков.
1
Captain Maxee
Велосипедист...
320 / 204 / 73
Регистрация: 15.12.2015
Сообщений: 753
Завершенные тесты: 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
2129 / 1488 / 453
Регистрация: 05.06.2014
Сообщений: 4,328
12.02.2017, 23:43 #5
Цитата Сообщение от FishZone Посмотреть сообщение
Добрый вечер. Читаю вот книгу по Липманну и ничего не понимаю из этих слов, может кто нормально по-человечески объяснить?
У каждого объекта есть адрес. Даже если объект большой-прибольшой, адрес занимает восемь hex-цифр. В указателе записан этот адрес. И там всегда восемь hex-цифр, даже если указатель указывает на большой-прибольшой объект.
1
FishZone
2 / 2 / 7
Регистрация: 24.11.2016
Сообщений: 77
12.02.2017, 23:53  [ТС] #6
Спасибо всем большое, думаю пойму со временем
0
Nishen
13.02.2017, 06:30
  #7

Не по теме:

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

0
gru74ik
Модератор
Эксперт CЭксперт С++
4648 / 1962 / 293
Регистрация: 20.02.2013
Сообщений: 5,225
Записей в блоге: 23
13.02.2017, 18:15 #8
 Комментарий модератора 
FishZone, пожалуйста, прочитайте правила форума.
Особое внимание обратите на пункт 4.3 (порядок именования тем).

.
0
_stanislav
Рука
271 / 262 / 164
Регистрация: 16.08.2014
Сообщений: 1,240
Завершенные тесты: 2
13.02.2017, 18:26 #9
FishZone, почитай В. И. Юров ASSEMBLER, тогда лучше будешь представлять данную тему.
0
gru74ik
Модератор
Эксперт CЭксперт С++
4648 / 1962 / 293
Регистрация: 20.02.2013
Сообщений: 5,225
Записей в блоге: 23
13.02.2017, 19:08 #10
FishZone, почитай эту тему у Стивена Праты. Там прям ну очень подробно всё разжёвано.
0
Captain Maxee
13.02.2017, 22:32
  #11

Не по теме:

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

0
_stanislav
13.02.2017, 22:39
  #12

Не по теме:

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

0
gru74ik
Модератор
Эксперт CЭксперт С++
4648 / 1962 / 293
Регистрация: 20.02.2013
Сообщений: 5,225
Записей в блоге: 23
13.02.2017, 23:29 #13

Не по теме:

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



Добавлено через 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
Привет! Вот еще темы с решениями:

Кто может объяснить строку кода
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