Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос из теста 
V
    Опции темы
GoldFinch
Дата 23.4.2010, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



профит тут только для случая массивов.
для всех остальных случаев - одни неудобства, т.к. надо приводить к (char*) чтобы использовать нормальную адресную арифметику.
PM MAIL ICQ   Вверх
mes
Дата 23.4.2010, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(jimbo @  23.4.2010,  18:19 Найти цитируемый пост)
но математически он ни разу не очевиден. 

в задаче с арбузами и апельсинами то же не очевидно ?


--------------------
PM MAIL WWW   Вверх
jimbo
Дата 26.4.2010, 09:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 18.6.2009
Где: Южно-Сахалинск

Репутация: нет
Всего: нет



Цитата(jimbo @  23.4.2010,  18:19 Найти цитируемый пост)
но математически он ни разу не очевиден. 

в задаче с арбузами и апельсинами то же не очевидно ?

Нет, не очевидно. мы же спрашиваем не количество апельсинов или арбузов между 1 и 10, а расстояние, скажем в метрах. т.е. если апельсин в 4 раза Уже чем арбуз - то какое расстояние между 1 и 10?

Добавлено через 11 минут и 10 секунд
Цитата(GoldFinch @ 23.4.2010,  19:30)
профит тут только для случая массивов.
для всех остальных случаев - одни неудобства, т.к. надо приводить к (char*) чтобы использовать нормальную адресную арифметику.

Цитата

для всех остальных случаев - одни неудобства, т.к. надо приводить к (char*) чтобы использовать нормальную адресную арифметику.


можно изъезженный примерчик? с утра плохо соображается:(
--------------------
Я не играю в шахматы - в шахматах я борюсь. А.А.Алехин
PM MAIL WWW   Вверх
djamshud
Дата 26.4.2010, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 4
Всего: 39



jimbo, вам же уже объяснили, что измеряется смещение не в байтах, а в количестве объектов. А чтобы измерять расстояние между арбузами в апельсинах, приводите тип от арбуза к апельсину.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
GoldFinch
Дата 26.4.2010, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



jimbo, пример - это когда надо обходить не массив, а структуру с полями разной длины
PM MAIL ICQ   Вверх
triclosan
Дата 26.4.2010, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 515
Регистрация: 18.8.2006

Репутация: 2
Всего: 12



Цитата(jimbo @  26.4.2010,  09:31 Найти цитируемый пост)
Нет, не очевидно. мы же спрашиваем не количество апельсинов или арбузов между 1 и 10, а расстояние, скажем в метрах. т.е. если апельсин в 4 раза Уже чем арбуз - то какое расстояние между 1 и 10?

Для расстояний используйте диаметры фруктов/ягод - 
Код

sizeof

PM MAIL   Вверх
jimbo
Дата 26.4.2010, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 18.6.2009
Где: Южно-Сахалинск

Репутация: нет
Всего: нет



Цитата(djamshud @ 26.4.2010,  09:53)
jimbo, вам же уже объяснили, что измеряется смещение не в байтах, а в количестве объектов. А чтобы измерять расстояние между арбузами в апельсинах, приводите тип от арбуза к апельсину.

Цитата

вам же уже объяснили, что измеряется смещение не в байтах, а в количестве объектов. А чтобы измерять расстояние между арбузами в апельсинах, приводите тип от арбуза к апельсину.


 smile  ребят, вопрос уже давным давно не сюда. вы как бы читаете вообще что я пишу?


Цитата


Цитата

Нет, не очевидно. мы же спрашиваем не количество апельсинов или арбузов между 1 и 10, а расстояние, скажем в метрах. т.е. если апельсин в 4 раза Уже чем арбуз - то какое расстояние между 1 и 10?

Для расстояний используйте диаметры фруктов/ягод - 


вот это то и обсуждается! что расстояние для разных типов разное, но из-за адресной арифметики, мы получаем расстояние в нужных нам диаметрах. Вы что, действительно не понимаете суть вопроса? Рассмотрите задачу с точки зрения математики а не программирования. если адрес первого элемента 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)
Видите математическое несоответствие?


Цитата

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


в смысле? 
Код

struct tmp
{
int a;
double b;
};

struct tmp * ptr = new struct tmp[666];
ptr[100].b = 0.1;


и что тут?  как раз тут опять адресная арифметика помогает упростить код. без нее вы бы писали что-то типа:

ptr [ 100* sizeof(struct tmp)+4] = (double)0.1; разве нет?


--------------------
Я не играю в шахматы - в шахматах я борюсь. А.А.Алехин
PM MAIL WWW   Вверх
GoldFinch
Дата 26.4.2010, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



jimbo, 
я имел ввиду структуры вида
Код

int x;
char y[x];
int z;

PM MAIL ICQ   Вверх
djamshud
Дата 26.4.2010, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 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
PM   Вверх
xvr
Дата 27.4.2010, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Смысл программы на языке программирования определяется языком програмирования, а не математикой.
В математике x=x+1 невозможно, а в програмировании - на каждом шагу  smile Вот такой вот парадокс  smile 

PM MAIL   Вверх
Albor
Дата 27.4.2010, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 589
Регистрация: 28.2.2009

Репутация: 2
Всего: 9



Цитата(jimbo @  26.4.2010,  12:59 Найти цитируемый пост)
из-за адресной арифметики

Понятия адреса и указателя не эквивалентны, отсюда и непонятки. Арифметика указателей не то же самое, что адресная арифметика (такой в срр вроде как и нет вообще). Во так я вижу данный вопрос.
PM MAIL ICQ   Вверх
Albor
Дата 27.4.2010, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 589
Регистрация: 28.2.2009

Репутация: 2
Всего: 9



Взглянув на арбузы и апельсины, встречная задача: допустим (как говорят математики) что для хранения объектов есть некая коробка-контейнер, способная вместить 10 апельсинов или 2 арбуза. Вопрос - в чём измерять, вместимость контейнера?  smile  Получается, что если указатель имеет тип указателя на арбуз, то, очевидно, что в данном случае ответ будет 2, а если тип указатель на апельсин - то 10. А если приведём тип к указателю на вишню, то вообще ого-го. Всё очень даже логично и правильно и с точки зрения математики и с точки зрения программирования  smile .
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0839 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.