Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Размер указателя на структуру и размер unsigned int  (Прочитано 7762 раз)
0 Пользователей и 1 Гость смотрят эту тему.
LemmonRus
Помогающий

ru
Offline Offline
В правильно заданном вопросе 90% ответа.


« : 15-11-2012 10:05 » 

Можно ли считать что они совпадают по размеру ?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 15-11-2012 10:16 » 

в общем случае можно. Но когда надо совсем совсем чётко точно, возьми да проверь

Код:
if(sizeof(MyStruct*)!=sizeof(unsigned int))
{
   throw ;//тут какой-нибудь караул
}

Добавлено через 26 секунд:
а можно вопрос: зачем тебе это понадобилось ?
« Последнее редактирование: 15-11-2012 10:16 от Алексей1153 » Записан

darkelf
Молодой специалист

ua
Offline Offline

« Ответ #2 : 15-11-2012 10:24 » 

если не хочется проблем при переносе на другие программные/аппаратные платформы  (даже из WIN32 в WIN64), то лучше не делать такого предположения. Специально для переносимости придумали тип intptr_t, uintptr_t и ptrdiff_t. Если интересно - можете почитать теорию, приведённую по ссылке: http://www.viva64.com/ru/a/0050/
« Последнее редактирование: 15-11-2012 10:27 от darkelf » Записан
LemmonRus
Помогающий

ru
Offline Offline
В правильно заданном вопросе 90% ответа.


« Ответ #3 : 15-11-2012 11:14 » 

в общем случае можно. Но когда надо совсем совсем чётко точно, возьми да проверь

Код:
if(sizeof(MyStruct*)!=sizeof(unsigned int))
{
   throw ;//тут какой-нибудь караул
}

Добавлено через 26 секунд:
а можно вопрос: зачем тебе это понадобилось ?
Все просто, старая библиотека без исходников,в программе ее использующей возникла странная бага.
Из исходников программы и хедера библиотеки видно что указатель передается зачем-то через unsigned int переменную, надо внести в программу костыли чтоб работала.
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #4 : 15-11-2012 11:35 » 

Хм, если библиотека использует внутри "обрезание" указателя (кстати, неважно, на структуру или нет, указатель есть указатель), например, до 32 (16 - если очень старая) бит, то на более высокоразрядных платформах, боюсь, никакие костыли, в самом общем случае, тебе не помогут. Потому правильно делать, как сказал darkelf. Те изначально использовать врапперы типов.
А так, нууу попытай счастье.
« Последнее редактирование: 15-11-2012 11:37 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #5 : 19-11-2012 06:07 » 

Из исходников программы и хедера библиотеки видно что указатель передается зачем-то через unsigned int переменную, надо внести в программу костыли чтоб работала.
так внеси ) Поставь тип указателя вместо unsigned int
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines