![]() |
|
Модераторы: bsa |
![]()
|
|
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
профит тут только для случая массивов.
для всех остальных случаев - одни неудобства, т.к. надо приводить к (char*) чтобы использовать нормальную адресную арифметику. |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
в задаче с арбузами и апельсинами то же не очевидно ? |
|||
|
||||
| jimbo |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 180 Регистрация: 18.6.2009 Где: Южно-Сахалинск Репутация: нет Всего: нет |
в задаче с арбузами и апельсинами то же не очевидно ? Нет, не очевидно. мы же спрашиваем не количество апельсинов или арбузов между 1 и 10, а расстояние, скажем в метрах. т.е. если апельсин в 4 раза Уже чем арбуз - то какое расстояние между 1 и 10? Добавлено через 11 минут и 10 секунд
можно изъезженный примерчик? с утра плохо соображается:( --------------------
Я не играю в шахматы - в шахматах я борюсь. А.А.Алехин |
||||
|
|||||
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 4 Всего: 39 |
jimbo, вам же уже объяснили, что измеряется смещение не в байтах, а в количестве объектов. А чтобы измерять расстояние между арбузами в апельсинах, приводите тип от арбуза к апельсину.
-------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
jimbo, пример - это когда надо обходить не массив, а структуру с полями разной длины
|
|||
|
||||
| triclosan |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 515 Регистрация: 18.8.2006 Репутация: 2 Всего: 12 |
||||
|
||||
| jimbo |
|
||||||||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 180 Регистрация: 18.6.2009 Где: Южно-Сахалинск Репутация: нет Всего: нет |
вот это то и обсуждается! что расстояние для разных типов разное, но из-за адресной арифметики, мы получаем расстояние в нужных нам диаметрах. Вы что, действительно не понимаете суть вопроса? Рассмотрите задачу с точки зрения математики а не программирования. если адрес первого элемента 1000, а десятого - 1036. Вычитая из адреса 10 элемента адрес 1 элемента, мы, математически, получаем 36. это и было в коде result = b - a. никакие преведения к типу тут не стоят. компилятор, изначально, видит, что вычисляется разница между адресами указателей типа int, размерностью 4 байта, приводит разницу в число, кратное размерности, и это, блин, очень логично с точки зрения программирования, но не очевидно с точки зрения математики. вы же не получаете 9 если вычтете из 100-10? а вот в программировании получите, если размерность указателя будет 10 байт. И это очень даже хорошо, для пробега по любому виду массивов. char *c_ptr; int* i_ptr; struct item *si_ptr; c_ptr = c_ptr+1; i_ptr = i_ptr +1; si_ptr = si_ptr + 1; везде эта единичка не одинакова. по сути она равна 1*sizeof(char), 1*sizeof(int), 1*sizeof(struct item) Видите математическое несоответствие?
в смысле?
и что тут? как раз тут опять адресная арифметика помогает упростить код. без нее вы бы писали что-то типа: ptr [ 100* sizeof(struct tmp)+4] = (double)0.1; разве нет? --------------------
Я не играю в шахматы - в шахматах я борюсь. А.А.Алехин |
||||||||||||
|
|||||||||||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
jimbo,
я имел ввиду структуры вида
|
|||
|
||||
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 4 Всего: 39 |
>это, блин, очень логично с точки зрения программирования, но не очевидно с точки зрения математики
Если вы еще не заметили, адресная арифметика - программерская забава:). Хотите заниматься математикой - вычитайте инты, а адреса оставьте в покое. В программировании удобно как раз так, как сделано. Я прибавляю или вычитаю что-то из адреса и не парюсь о размерности типов. Хотите низкоуровневых трахов, так работайте с байтовыми буферами. Это сообщение отредактировал(а) djamshud - 26.4.2010, 13:19 -------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Смысл программы на языке программирования определяется языком програмирования, а не математикой.
В математике x=x+1 невозможно, а в програмировании - на каждом шагу |
|||
|
||||
| Albor |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 589 Регистрация: 28.2.2009 Репутация: 2 Всего: 9 |
||||
|
||||
| Albor |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 589 Регистрация: 28.2.2009 Репутация: 2 Всего: 9 |
Взглянув на арбузы и апельсины, встречная задача: допустим (как говорят математики) что для хранения объектов есть некая коробка-контейнер, способная вместить 10 апельсинов или 2 арбуза. Вопрос - в чём измерять, вместимость контейнера?
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |