Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.66/56: Рейтинг темы: голосов - 56, средняя оценка - 4.66
25 / 25 / 19
Регистрация: 13.07.2015
Сообщений: 433

Указатели в с++ указывают только на адрес?

25.08.2015, 23:39. Показов 13986. Ответов 213
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Например указатель int *p; Он может инициализироваться только адресом?(и ничем другим) например *p=&s
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.08.2015, 23:39
Ответы с готовыми решениями:

Убедиться, что адрес первого элемента массива и адрес, хранящийся в указатели на этот массив равны.
Убедиться, что адрес первого элемента массива и адрес, хранящийся в указатели на этот массив - равны.

Указатели, адрес переменной
int main(коллеги!) Снова прошу меня поправить! Есть такой пример: int *ptr; // переменная - ptr, указывает на - int...

Указатели и ссылки. Как сохранить адрес?
Небольшая путаница с указателями и ссылками. Допустим,есть некий указатель p1, который указывает на экземпляр класса a1 в динамической...

213
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
26.08.2015, 18:50
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от ct0r Посмотреть сообщение
почему в указателях только адрес.
потому ничего другого туда не засунешь.

Цитата Сообщение от ct0r Посмотреть сообщение
Так я про это и сказал. 0 - это абстракция. Это значит, что он не подразумевает адрес 0
в контексте указателей,
ноль подразумевает невалидный адрес.
этого вполне достаточно.

Цитата Сообщение от ct0r Посмотреть сообщение
The value representation of pointer types is implementation-defined.
Ты как это понимаешь?
я понимаю это так:
детали реализации типа данных "указатель" на усмотрении производителя.

Цитата Сообщение от ct0r Посмотреть сообщение
что мы говорим об абсолютных адресах
мы говорим о том, что указатель содержит адрес.
и ничего кроме адреса.

например, мы не можем запихать туда объект типа int,
не преобразовав его предварительно к типу указателя.

мы не обсуждали конкретную природу
конкретного вида указателей в каждом конкретном случае.

Цитата Сообщение от ct0r Посмотреть сообщение
Ну окей, стандарт так стандарт. Можешь показать, где в стандарте написано, что в указателе на объект должен быть только адрес и ничего кроме?
а в переменной типа int не может быть ничего, кроме инта.
удивительно, не правда ли?

Добавлено через 5 минут
Цитата Сообщение от ct0r Посмотреть сообщение
То есть по-твоему &MyClass::field - это просто адрес?
ага.

Цитата Сообщение от ct0r Посмотреть сообщение
И &MyClass::func, где func - это виртуальная функция, - это тоже просто адрес?
ага.

Цитата Сообщение от ct0r Посмотреть сообщение
То есть по этим адресам что-то хранится и я могу их просто разыменовать и получить какие-то данные?
есть определенные правила игры.
и вы эти правила знаете.

C++
1
(obj.*foo)();
смысл простой: зная адрес мы можем получить доступ.
и члены класса не исключения.
0
1 / 1 / 3
Регистрация: 02.04.2015
Сообщений: 169
27.08.2015, 03:07
А можно подробнее о последнем вашем утверждении:"То, что биты адресса можно интерпретировать как char".
0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2226 / 1428 / 420
Регистрация: 16.05.2013
Сообщений: 3,654
Записей в блоге: 6
27.08.2015, 09:11
Цитата Сообщение от ct0r Посмотреть сообщение
Ну все-таки нуль в контексте указателей - не адрес. Это особая штука, говорящая о том, что указатель ни на что не указывает. Мы же не говорим, что указатель указывает на объект с адресом 0. Да и тогда int* p=1 и дальнейшие операции над p работали бы так же, как и при int* p=0. Но они работают по-разному, потому что null pointer и просто невалидный указатель (указывающий фиг знает куда) - вещи разные. Можно вдобавок привести цитату из стандарта:
Не знаю как в линуксе, но в винде понятия нулевого указателя интерпретируется иначе. А именно система выделяет диапазон от 0x0 до 0хFFFF для выявления нулевых указателей. Вот пример:
C++
1
2
3
4
5
6
7
int main() {
    int * p1 = reinterpret_cast<int*>(0x00010000);
    *p1 = 11; //<-- нормально
 
    int * p2 = reinterpret_cast<int*>(0x00000001);
    *p2 = 11;//<-- обращение к нулевому указателю
}
Так что Фиг знает куда указывает указатель.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
27.08.2015, 12:11
Глупости какие-то тут некоторые люди пишут...
Указатель с адресом 0 такой же обычный указатель как и любой другой, и ноль в нём - это адрес, на который он указывает.
В современных ОС обращаться по этому адресу нет никакого смысла, да и сами ОС этого не позволяют. Просто принято использовать его как показатель неинициализированности.
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
27.08.2015, 12:16
Цитата Сообщение от castaway Посмотреть сообщение
В современных ОС обращаться по этому адресу нет никакого смысла, да и сами ОС этого не позволяют.
Смотря что это за указатель. Например dlsym может вполне вернуть 0 в void*, и этот указатель валидный.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
27.08.2015, 12:19
Цитата Сообщение от Croessmah Посмотреть сообщение
Смотря что это за указатель.
А что, они разные бывают? Если не считать тип.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
27.08.2015, 13:17
Свеженький вопрос на SO по теме нулевого указателя.
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
27.08.2015, 13:57
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
У меня тоже есть хаки на готове
Попробуй добавить виртуальности
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
27.08.2015, 13:59
Цитата Сообщение от shmkv Посмотреть сообщение
Попробуй добавить виртуальности
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
А подробнее? Я не спорю, что решение не кроссплатформленное, но VS спокойно съест его и если нету обращения к полям экземпляра или виртуальным методом
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
27.08.2015, 14:00
Цитата Сообщение от ct0r Посмотреть сообщение
Из нее следует, что 0 - это не адрес байта в памяти.
Не следует. По нулевому адресу вполне можно обратиться через указатель. И на некоторых платформах это даже допустимо.
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
27.08.2015, 14:05
Цитата Сообщение от shmkv Посмотреть сообщение
Не следует. По нулевому адресу вполне можно обратиться через указатель. И на некоторых платформах это даже допустимо.
Вы это сами придумали или взяли откуда-то?
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
27.08.2015, 14:09
Цитата Сообщение от Mr.X Посмотреть сообщение
Вы это сами придумали или взяли откуда-то?
А по делу есть что сказать/спросить? Возьмем старый добрый дос - по нулевому указателю можно вполне легально сменить адрес обработчика исключения деления на 0.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
27.08.2015, 14:18
Цитата Сообщение от Mr.X Посмотреть сообщение
Вы это сами придумали или взяли откуда-то?
Цитата Сообщение от shmkv Посмотреть сообщение
А по делу есть что сказать/спросить? Возьмем старый добрый дос - по нулевому указателю можно вполне легально сменить адрес обработчика исключения деления на 0.
Я даже могу легко доказать это, но мизерное чувство гордости во мне говорит: "Почему ты должен доказывать кому-то очевидные вещи только из-за того, что этот кто-то не понимает как это работает, да ещё и с уверенностью утверждает обратное".
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
27.08.2015, 16:55
Цитата Сообщение от shmkv Посмотреть сообщение
старый добрый дос
Со старым добрым не работал, однако Страуструп черным по белому пишет, что гарантируется, что не существует объектов с нулевым адресом.
0
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
27.08.2015, 20:49
Цитата Сообщение от hoggy Посмотреть сообщение
детали реализации типа данных "указатель" на усмотрении производителя.
Ну то есть value, которое там в них может быть (например, как вариант адрес) - тоже на усмотрение производителя?

Цитата Сообщение от hoggy Посмотреть сообщение
а в переменной типа int не может быть ничего, кроме инта.
Это некорректный пример. Про int явно написано, что там может быть.

Цитата Сообщение от hoggy Посмотреть сообщение
ага.
Окей. Вот тут &MyClass::foo (виртуальная функция) - адрес чего мы получили?

Цитата Сообщение от hoggy Посмотреть сообщение
смысл простой: зная адрес мы можем получить доступ.
Ага, только без obj король-то голый.

Цитата Сообщение от castaway Посмотреть сообщение
Указатель с адресом 0 такой же обычный указатель как и любой другой, и ноль в нём - это адрес, на который он указывает.
http://c-faq.com/null/machexamp.html
И
A null pointer constant is an integer literal (2.13.2) with value zero or a prvalue of type std::nullptr_t. A null pointer constant can be converted to a pointer type; the result is the null pointer value of that type and is distinguishable from every other value of object pointer or function pointer type.
Цитата Сообщение от shmkv Посмотреть сообщение
Не следует. По нулевому адресу вполне можно обратиться через указатель. И на некоторых платформах это даже допустимо.
Следует. Еще раз, указатель, в котором 0 - это не обязательно нулевой адрес. Ссылка выше. А то, что в досе это 0 и по нему можно спокойно обращаться - это непереносимая особенность доса, причем тут С++?

Mr.X, я ошибся, думая, что объемлющее слово для "указателей на объекты и функции" и "указателей на члены" - "указатели". В С++ "указатели на объекты и функции" - это просто "указатели", поэтому всеобъемлющей будет не слово, а фраза "указатели" и "указатели на члены". То есть указатели на члены я приплел в эту тему зря, каюсь
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
27.08.2015, 21:01
ct0r, к сожалению у меня почему то не открывается ссылка..

Цитата Сообщение от ct0r Посмотреть сообщение
Еще раз, указатель, в котором 0 - это не обязательно нулевой адрес.
Цитата Сообщение от ct0r Посмотреть сообщение
А то, что в досе это 0 и по нему можно спокойно обращаться - это непереносимая особенность доса, причем тут С++?
Если я скомпилирую программу компилятором GCC 5.1.0 (MinGW) по канонам стандарта C++11 и успешно прочитаю/запишу данные по нулевому указателю, то это будет доказывать что дело не в переносимости и что в нулевом указателе, который можно разименовать, адрес всегда равен нулю?
0
99 / 46 / 18
Регистрация: 09.08.2015
Сообщений: 367
27.08.2015, 21:03
Null это не какой то хитрый (или невалидный) адрес, это его вообще отсутствие. Просто нереально положить в переменную ничего. Следовательно в указателе либо адрес либо пусто.
Нулевой адрес это "массив[0]", а "указатель = 0" это "указатель = ничего". Цифры те же смысл разный.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
27.08.2015, 21:05
Цитата Сообщение от AncientPenguin Посмотреть сообщение
Следовательно в указателе либо адрес либо пусто.
В указателе не бывает "пусто". Где ты такой дряни начитался?
0
99 / 46 / 18
Регистрация: 09.08.2015
Сообщений: 367
27.08.2015, 21:12
Цитата Сообщение от castaway Посмотреть сообщение
В указателе не бывает "пусто". Где ты такой дряни начитался?
Car *a = 0;

Вот представь ты такой код увидел, как думаешь логически что в указателе? Объект по адресу нуль?
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
27.08.2015, 21:22
Цитата Сообщение от AncientPenguin Посмотреть сообщение
как думаешь логически что в указателе?
Тут нечего думать, в указателе нулевой адрес.

Цитата Сообщение от AncientPenguin Посмотреть сообщение
Объект по адресу нуль?
Не факт что там есть этот объект. Но я на примере (не в Windows) могу его там создать. Я с таким же успехом могу выбрать абсолютно любое случайное значение указателя и это не будет означать что объект по этому адресу есть.

Добавлено через 1 минуту
AncientPenguin, я не говорю о данных, которые находятся по тому или иному адресу. Я говорю о том, что нулевой указатель содержит адрес, и его можно разименовать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.08.2015, 21:22

Вычислить адрес верхушки стека, адрес следующей команды, адрес переменной, адрес которой содержится в BX
Помогите решить следующие задачи: 1.Вычислить адрес верхушки стэка. 2.Вычислить адрес следующей выполняемой программы. 3. Вычислить...

Указатели - почему pNext работает как ссылка на следующий адрес?
struct Node { int value; struct Node* pNext; // ссылка на следующий адрес }; struct AddressInfo { char name; char...

Массивы и Указатели: распечатать таблицу,содержащую имя переменной,ее значение и адрес
Условие:Написать программу,которая создает несколько переменных целого и вещественного типа,для каждой переменной создает указатель,а затем...

хочу только адрес страници
Вот я замечал порой заходя на сайт что, где нормально пишешь название сайта скажем www.aaa.com то на некоторых сайтах когда заходишь то...

Частный адрес, динамический адрес, статический адрес - какой у меня?
Привет. Открываем рубрику глупых вопросов. Я сижу с компьютера который подключен к интернету по кабелю, кабель от компьютера идёт к...


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

Или воспользуйтесь поиском по форуму:
60
Закрытая тема Создать тему
Новые блоги и статьи
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru