Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 5.00
Owyn
0 / 0 / 0
Регистрация: 28.05.2009
Сообщений: 64
#1

Дереференс указателей - C++

30.07.2010, 01:16. Просмотров 1627. Ответов 20
Метки нет (Все метки)

после прочтения мануала появилась необходимость использовать beth = *ted; но оно выдает еррор C2100 =\

надо:

есть size_t arg = 0x12345

нужно прочитать int по адресу из arg, можно ли это сделать поинтерами * или & ? или только кастом можно?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.07.2010, 01:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Дереференс указателей (C++):

по поводу указателей. Как правильно задавать массив указателей и его удалять? - C++
Т.е., например создаю указатель: TPoint *p_Point=NULL; а если массив? TPoint *p_MassPoint; //=?; как массив обнулить не ясно ...

Почему в сортировке указателей на объекты в вызове функции используются адреса объектов, а не указателей? - C++
Доброго времени суток! Рассматриваю пример (из Лафоре) сортировки массива указателей на объекты, для чего используются указатели на...

Создать специфицированный шаблон функции, принимающей массив указателей на char и количество самих указателей - C++
Задача: создать специфицированный шаблон функции, принимающей массив указателей на char и количество самих указателей. Вернуть адрес...

Объяснить различия в работе указателей на целое число и указателей на const char (строки в стиле Си) - C++
Уважаемые программисты, возникло несколько вопросов касательно указателей. Почему при выводе указателя на int нужна звёздочка (*), а...

Создать специализацию для шаблона, которая принимает массив указателей на строки и количество этих указателей - C++
Нужно создать специализацию для шаблона, которая принимает массив указателей на строки и количество этих указателей. Эта специализация...

Как обойтись без указателей и указателей на указатель? - C++
Ибо не совсем выходит понять,что на что тут указывает #include "stdafx.h" #include <iostream> #include <stdlib.h> using namespace...

20
easybudda
Модератор
Эксперт CЭксперт С++
9728 / 5679 / 972
Регистрация: 25.07.2009
Сообщений: 10,929
31.07.2010, 16:17 #16
Цитата Сообщение от Evg Посмотреть сообщение
Если "это" - хранение адреса в целом
ага, я про это и спрашивал.
Цитата Сообщение от Evg Посмотреть сообщение
в качестве реального примера загляни в файл /usr/include/elf.h на юниксах.
Вот за это спасибо - интересно...
0
Evg
Эксперт CАвтор FAQ
18464 / 6514 / 455
Регистрация: 30.03.2009
Сообщений: 18,188
Записей в блоге: 29
31.07.2010, 16:24 #17
Цитата Сообщение от easybudda Посмотреть сообщение
Вот за это спасибо - интересно...
Такое нужно для программ по типу загрузчиков. Они работают с непосредственными адресами в памяти, но тем не менее эти адреса они не трактуют как указатели, потому как работают НЕ с объектами (переменными). Адрес трактуется как обычное число в некоей сплошной адресации памяти. При загрузке сегментов в память работа с адресами идет как с long'ами, потому как фактически идёт маппирование памяти средствами ОС. Потом когда начинается процесс настройки адресов (resolve), то такие целочисленные адреса преобразуются в указатели, потому как на Си косвенное обращение возможно только через величину типа указатель
2
easybudda
Модератор
Эксперт CЭксперт С++
9728 / 5679 / 972
Регистрация: 25.07.2009
Сообщений: 10,929
31.07.2010, 17:01 #18
из /usr/include/sys/elf32.h
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/*
 * ELF definitions common to all 32-bit architectures.
 */
 
typedef u_int32_t       Elf32_Addr;
/* ... */
 
/*
 * ELF header.
 */
 
typedef struct {
/* ... */
        Elf32_Addr      e_entry;        /* Entry point. */
/* ... */
} Elf32_Ehdr;
 
/*
 * Section header.
 */
 
typedef struct {
/* ... */
        Elf32_Addr      sh_addr;        /* Address in memory image. */
/* ... */
} Elf32_Shdr;
ну в общем да, так нагляднее...
кстати, оттуда же
C
1
2
3
4
5
6
7
typedef struct {
        Elf32_Sword     d_tag;          /* Entry type. */
        union {
                Elf32_Size      d_val;  /* Integer value. */
                Elf32_Addr      d_ptr;  /* Address value. */
        } d_un;
} Elf32_Dyn;
1
Evg
Эксперт CАвтор FAQ
18464 / 6514 / 455
Регистрация: 30.03.2009
Сообщений: 18,188
Записей в блоге: 29
31.07.2010, 17:18 #19
Цитата Сообщение от easybudda Посмотреть сообщение
кстати, оттуда же
Это не есть случай, как из твоего примера. В union'е просто хранится величина либо одного, либо второго типа, в зависимости от значения d_tag. К преобразованию типа никакого отношения не имеет

Добавлено через 1 минуту
Цитата Сообщение от easybudda Посмотреть сообщение
ну в общем да, так нагляднее...
Это не для наглядности. Просто большинство сервисных программ, работающих непосредственно с бинарным форматом, работают с адресами как с числами. Это не могут быть указатели, потому как работа идёт с файлом, который в память не загружен
1
easybudda
Модератор
Эксперт CЭксперт С++
9728 / 5679 / 972
Регистрация: 25.07.2009
Сообщений: 10,929
31.07.2010, 18:03 #20
Цитата Сообщение от Evg Посмотреть сообщение
Это не есть случай, как из твоего примера.
Да знаю... По сути у обоих параметров тип u_int32_t, просто напомнило Кстати, зачем столько названий для типа unsigned int? unint32_t, u_int32_t, __uint32_t...

Цитата Сообщение от Evg Посмотреть сообщение
Это не для наглядности.
Ну в смысле - мне нагляднее, я же не понимал, зачем адреса в целочисленных переменных хранить...
0
Evg
Эксперт CАвтор FAQ
18464 / 6514 / 455
Регистрация: 30.03.2009
Сообщений: 18,188
Записей в блоге: 29
31.07.2010, 18:59 #21
Цитата Сообщение от easybudda Посмотреть сообщение
Кстати, зачем столько названий для типа unsigned int? unint32_t, u_int32_t, __uint32_t...
А хз.... одним нравится так, другим эдак. Это не названия для типа unsigned, а синонимы для беззнакового типа размером в 32 бита. Потому как на разных платформах размеры базового типа настроены по разному. При этом на каждой платформе имеется свой .h файл, в котором описан тип, например, uint32_t, а далее в машинно-независимых частях везде используют именно uint32_t, не особо заморачиваясь на тему, во что же определён этот typdef
0
31.07.2010, 18:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.07.2010, 18:59
Привет! Вот еще темы с ответами:

Различия указателей char* от указателей других типов - C++
Помогите пожалуйста разобраться! Прочитал раздел про указатели и даже вроде бы понял. Что касается указателей на тип int. Но что...

Создание массивов указателей на массивы указателей - C++
Помогите в решении задачи: создал массив указателей на массивы указателей на строки, но компилятор ругается на то что не может...

Добавление нового указателя в конец массива указателей, удаление указанного элемента, добавление указателей - C++
Здравствуйте. Помогите, пожалуйста, разобраться с одним большим заданием. Задание пока в процессе написания, но уже наверное есть ошибки....

Массив указателей на массив строк и сортировка массива указателей - C++
Добрый день. Поступил вопрос. Есть задача. У нас встроенный массив char mass;.Мы вводим строки до тех пор, пока не будет заполнен массив...


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

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

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