![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: нет Всего: 14 |
Помогите ) туплю сижу,собственно пример и output
http://codepad.org/3tR7DXiC В теории прибавляемое смещение 0х8, на практике получаем 0х20 сорри если вопрос глупый, сонный я ) -------------------- |
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
500mhz, это же арифметика указателей. указатель + N ==> передвинуть указатель на N элементов. (не на N байт!!!) т.е. указатель + N ==> это значение указателя + N*(размер того, на что он указывает). в вашем случае pVar + 8; означает: передвинуть указатель на 8 элементов. а так, как pVar это указатель на int, sizeof (int) = 4, то к адресу указателя прибаляется 8*4=32 (0x20) Если бы pVar указывал на char, было бы 8 Добавлено @ 04:41 можно здесь почитать, например: http://www.cs.umd.edu/class/sum2003/cmsc31...Op/pointer.html Это сообщение отредактировал(а) volatile - 14.3.2012, 04:47 |
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: нет Всего: 14 |
это все понятно
вообщем мне нада сделать следующее есть адрес неких данных есть оффсеты нужно прибавит к адресу оффсет и из получившегося адреса взять значение пс на асме это выглядит так
как это красиво сделать на С ? -------------------- |
|||
|
||||
| feodorv |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
Красиво не получится:
Или так:
Пусть не так красиво, как в асме, но зато можно short, long long и т.п. юзать))) Это сообщение отредактировал(а) feodorv - 14.3.2012, 20:25 -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||
|
|||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: нет Всего: 14 |
взрыв мозга )))
feodorv +1 пс и эти люди говорят что асм трудно читаем и понимаем? ))) -------------------- |
|||
|
||||
| sergioK1 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 417 Регистрация: 30.1.2011 Репутация: нет Всего: нет |
похожая ситуация , добаваил один чар
должен быть 13 , а он 16 , откуда и зачем ? P.S помню что где-то осуждалось, Это сообщение отредактировал(а) sergioK1 - 14.3.2012, 23:00 |
|||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
Всё правильно, выравнивание по 4-х байтной границе. Здесь точно обсуждалось ;) Это сообщение отредактировал(а) feodorv - 14.3.2012, 23:46 -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: нет Всего: 14 |
сделал так
TCC компилит а вот Pelles говорит error и все тут (addr = addr + *temp) интересно что говорит стандарт? -------------------- |
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
А что такое addr? Если только это не void*, то строчка нормальная. Ошибок именно в ней быть не должно. А вот здесь что-то не то. 500mhz, покажите что такое addr, не хочется строить догадки. (Ну или почему не воспользоваться макросом от feodorv, вполне нормальное решение для С, имхо) |
|||
|
||||
| 500mhz |
|
||||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: нет Всего: 14 |
volatile
интересно самому как бы сделать) по коду имеем int addr;
во тут как раз самое то ) при компиляции получаем addr + 0 (если shit1 первый мембер) -------------------- |
||||
|
|||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
Почему addr именно int? -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: нет Всего: 14 |
а почему нет? -------------------- |
|||
|
||||
| feodorv |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
Ну это всё-таки адрес или нет? Если адрес, то такое значение в Си может принимать только указатель:
Поэтому-то такой код и даёт ошибку: Напрямую присвоить указателю интегер значение в С запрещено (и правильно ;) Если очень хочется (а это мало когда нужно) из интегера сделать адрес, то это можно сделать так:
то есть напрямую задав преобразование типов. И наоборот:
Однако в 64-битном окружении (а интегер там остаётся 32-битным) такое преобразование будет некорректным. В любом случае, не стоит увлекаться такими преобразованиями. Пусть указатель остаётся указателем (то есть по значению - адресом), а интегер - интегером))) Это сообщение отредактировал(а) feodorv - 15.3.2012, 22:56 -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||||
|
|||||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: нет Всего: 14 |
feodorv
в моем случае addr это адрес начала заголовка данных в памяти имеется struct который описывает заголовок, сам заголовок состоит из различных значений и смещений в результате берем адрес начала данных 0xf0000000 прибавляем смещение 0xf0000000 + 0xa0 из полученого адреса 0xf000000a0 берем число которое интерпретируется а) как значение б) или как новое смещение пс просто меня ломает переписывать с 32 на 64 все это на асме ))) -------------------- |
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
||||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |