powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Растолкуйте
7 сообщений из 7, страница 1 из 1
Растолкуйте
    #38904362
Фотография Герой дня
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот этот пример-решение

Код: plaintext
1.
*(T*)&ptr=x;



17381263

вот это (T*) - приведение к ссылке адреса &ptr

а это *(T*)&ptr - взятие значения по этому адресу, верно ?
...
Рейтинг: 0 / 0
Растолкуйте
    #38904388
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Герой дняВот этот пример-решение

Код: plaintext
1.
*(T*)&ptr=x;



17381263

вот это (T*) - приведение к ссылке адреса &ptr Не совсем... Тут предполагается что ptr это простая переменная одного типа, а x это простая переменная другого типа.
Код: plaintext
1.
2.
3.
4.
T x;
S ptr;
ptr = x; // ошибка, несовпадение типов
ptr = (S)x; // нет ошибки синтаксической, но легко увидеть если ошибка логическая (если T нельзя приводить в S).


А теперь мы приходим к кошмару:
&ptr - указатель на тип S
(T*)&ptr - превращаем указатель на S в указатель на T
*(T*)&ptr - сюда уже можно писать.

Ну и как wst сказал в цитируемом посте: "Если цель просто скомпилировать..."

*(T*)&ptr=x; Скомпилируется без проблем, но правомочность такого приведения никто не гарантирует.
По существу это тоже самое что и ptr = (S)x . Но когда мы знаем что x это число, а ptr это класс - сразу возникнут сомнения в разумности написавшего. А через обилие спецсимволов и конвертаций это можно замаскировать...

По существу это чистое вредительство.
...
Рейтинг: 0 / 0
Растолкуйте
    #38904408
Фотография Герой дня
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl,

спасибо, теперь стало ясно
...
Рейтинг: 0 / 0
Растолкуйте
    #38904416
wst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Самое интересное в таком решении - если писать через *(T*)&ptr, а читать весь ptr. И писать туда значения размерами, например, по очереди 4 и 2 (ну и, главное, читать их потом), не обнуляя при этом этот самый несчастный ptr. Зато счастлив компилятор.
...
Рейтинг: 0 / 0
Растолкуйте
    #38904428
Фотография Герой дня
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wst,

мало что понял, почему 2 и 4, например..
...
Рейтинг: 0 / 0
Растолкуйте
    #38904436
wst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ок,
1. запустились, ptr = NULL (присваивание было в коде в исходном сообщении)
2. сделали f((int32_t)0xffff)
3. прочитали ptr, там 0xffff
4. сделали f(' ')
5. прочитали ptr, там не ' ', а 0xff20, как говорится "счастливой отладки"
...
Рейтинг: 0 / 0
Растолкуйте
    #38904444
Фотография Герой дня
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wst,

понятно, спб!
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Растолкуйте
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]