Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 10.06.2021
Сообщений: 3
1

Адрес, который содержит указатель

10.06.2021, 06:13. Показов 1930. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Наткнулся на такую интересную штуку и вроде как понял.
Есть один справочник, где есть вот такая вещь:

0xB74494 - Содержит указатель. Этот указатель:
+0 = Содержит указатель на первый элемент в пуле CVehicle
+4 = Содержит указатель на карту байтов показывающую какие элементы сейчас используются в пуле CVehicle
+8 = [dword] максимальное кол-во элементов в пуле CVehicle
+12 = [dword] текущее кол-во элементов в пуле CVehicle

Есть адрес, который содержит указатель. В разных источниках под словом "указатель" понимают адрес, на который указывает указатель, то есть просто значение указателя, а также я так понимаю, что указатель - это адрес в памяти, который содержит другой адрес.

Как это понимать в данном случае? Я думаю, что я себя просто путаю. И на самом деле этот адрес и является указателем, то есть адресом указателя. А уже по этому адресу лежит другой адрес, по смещению от которого можно получить разные значения.
Например я так понимаю, можно сделать так:
1) прочитать значение по 0xB74494
И это будет адрес.
2) прибавить к тому, что считали оффсет, например +8, и получим новый адрес с оффсетом
3) считать значение по этому новому адресу с оффсетом и получить максимальное кол-во элементов в пуле CVehicle
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.06.2021, 06:13
Ответы с готовыми решениями:

Существует указатель p. Можно ли выяснить, содержит он адрес допустимого значения или нет
если да, то как ?

Получить адрес памяти, на который ссылается указатель
Изучаю указатели, появился такой вопрос: int *b = new int(5); Как получить адрес памяти, на...

Сохранить адрес из указателя в другой указатель, а потом первый указатель удалить
Добрый день всем. Возмём простейший пример: #include <iostream> using namespace std; int...

Указатель на char и адрес
int main() { char value4 = 'a'; char value5 = 'b'; char *cptr = &value4; ...

5
фрилансер
5499 / 5095 / 1047
Регистрация: 11.10.2019
Сообщений: 13,346
10.06.2021, 08:02 2
Лучший ответ Сообщение было отмечено liquidoxygen как решение

Решение

liquidoxygen, указатель - это переменная. Эта переменная может содержать адрес

а это описана некая структура (только не средствами языка, а на словах)
Цитата Сообщение от liquidoxygen Посмотреть сообщение
+0 = Содержит указатель на первый элемент в пуле CVehicle
+4 = Содержит указатель на карту байтов показывающую какие элементы сейчас используются в пуле CVehicle
+8 = [dword] максимальное кол-во элементов в пуле CVehicle
+12 = [dword] текущее кол-во элементов в пуле CVehicle
Добавлено через 1 минуту
может выглядеть так
C++
1
2
3
4
5
6
7
struct somestruct
{
    CVehicle* item;
    CVehicle* map ;
    DWORD N1;
    DWORD N2;
};
1
0 / 0 / 0
Регистрация: 10.06.2021
Сообщений: 3
10.06.2021, 09:08  [ТС] 3
Алексей1153, Тогда я так понял, что этот адрес 0xB74494 и есть адрес указателя. То есть по этому адресу лежит значение указателя (адрес).
А это значение(адрес) является адресом структуры, по смещению которой можно получить элементы. Верно?

Вот то, что я изначально предполагал - во вложении.
Посмотрите пожалуйста.
Миниатюры
Адрес, который содержит указатель  
0
фрилансер
5499 / 5095 / 1047
Регистрация: 11.10.2019
Сообщений: 13,346
10.06.2021, 09:36 4
liquidoxygen, вроде всё так)

прокомментирую по картинке: в колонке Address у тебя физические (назовём их так, хотя это может быть и не так) значения адресов ОЗУ

по адресу 0xB74494 у тебя лежит переменная с типом указатель. Эта переменная имеет длину, скажем, 8 байтов (то есть, занимает адреса 0xB74494...0xB74494+8-1) и содержит в себе значение (на картинке это 0x0000000000000cd2), которое обозначает адрес чего-либо. В данном случае - адрес начала экземпляра структуры в ОЗУ
1
0 / 0 / 0
Регистрация: 10.06.2021
Сообщений: 3
10.06.2021, 09:57  [ТС] 5
Алексей1153, Спасибо. Я разбираюсь в указателях, но пришлось столкнуться с справочником, где описаны адреса в памяти словами. И я запутался в терминологии. Ибо под указателем можно понимать две вещи: 1) адрес указателя в памяти. 2) значение этого адреса (то есть адрес того, на что указывает). Сейчас понял, что это может зависеть от того, что даётся изначально.

Для закрепления я CE4 на dissect structures повесил адрес 0xB74494 и вот что он раскопал. Все идеально.
Вам еще раз спасибо, но тут дело даже не в самих указателях, а в терминологии.
Миниатюры
Адрес, который содержит указатель  
0
фрилансер
5499 / 5095 / 1047
Регистрация: 11.10.2019
Сообщений: 13,346
10.06.2021, 10:06 6
liquidoxygen, если структура расположения данных известна, то можно описать struct с нужным содержимым. Тогда не нужно будет вручную добавлять смещение указателю, а просто "указать" на начало экземпляра в памяти, а к полям иметь доступ через оператор ->
0
10.06.2021, 10:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.06.2021, 10:06
Помогаю со студенческими работами здесь

Указатель на произвольный адрес
Как можно заставить указатель указывать на адрес, который я сам введу. Например: int i = 10; /*...

Как руками записать адрес в указатель?
К примеру есть адрес CDCDCDCD или 0039F7B8 мне нужно написать так int*uk=CDCDCDCD;или...

Объясните, почему указатель на char - не возвращает адрес?
Объясните, почему указатель на char - не возвращает адрес? Должна же работать как int , не? ...

Как лучше присвоить указателю на указатель адрес массива
Во первых, как ЛУЧШЕ присвоить указателю на указатель адрес массива. int num =...

Как записать адрес в указатель во время работы программы
Нужно чтобы пользователь ввел адрес в сам указатель: int *ptr; cin >> ptr; error C2678:...

Передать напрямую текст в функцию, принимающую указатель на адрес
Всем привет) У меня есть ф-ция которая принимает адрес строки. Я хочу передать на прямую текст без...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru