|
Модераторы: LSD |
|
mimik |
|
|||
не Rohoss Я Профиль Группа: Участник Сообщений: 69 Регистрация: 1.11.2010 Репутация: нет Всего: 2 |
Не могу понять почему в ЯП так популярна индексация массивов с нуля, ведь это как-то не логично, да и преимуществ вроде нет.
|
|||
|
||||
FadilMamedov |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 5.11.2010 Репутация: нет Всего: нет |
Видимо сказывается традиция...
|
|||
|
||||
bilbobagginz |
|
|||
Naughtius Maximus Профиль Группа: Экс. модератор Сообщений: 8813 Регистрация: 2.3.2004 Где: Israel Репутация: 6 Всего: 317 |
mimik, ваше предложение не содержит вопрос.
и не понятно пример чего вы хотите: яп индексуюзего с 0 или с 1 или вообще объяснения почему это так. можете пояснить ? -------------------- Я ещё не демон. Я только учусь. |
|||
|
||||
mimik |
|
|||
не Rohoss Я Профиль Группа: Участник Сообщений: 69 Регистрация: 1.11.2010 Репутация: нет Всего: 2 |
по моему логичней начинать индексацию массивов с 1, первый элемент - индекс 1 Добавлено через 4 минуты и 29 секунд |
|||
|
||||
A5uKa |
|
|||
TЋ♥s F1rȜ iƧ BurȠiƞg Профиль Группа: Awaiting Authorisation Сообщений: 1928 Регистрация: 30.8.2008 Репутация: 1 Всего: 16 |
ну положительные числа с нуля начинаются.
|
|||
|
||||
baldina |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: нет Всего: 101 |
а это вот почему:
предположим, по адресу памяти A расположен массив. тогда адрес первой ячейки это А, адрес второй - A+1, адрес i-й - A+i представляя в форме доступа к элементу массива по индексу получаем A[0], A[1]...A[i] |
|||
|
||||
bars80080 |
|
|||
прапор творюет Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 3 Всего: 315 |
ноль не является ни положительным, ни отрицательным числом
это по-человечески логично, однако, говоря о ЯП надо принимать машинную логику. что такое массив? по сути, это регистр, где каждый физический элемент памяти содержит элемент массива. а элементы эти выстроены по порядку. наглядно по наиболее простым ЯП виден этот момент, так как среди функций работы с массивами могут отсутствовать многие, но функции pop() и push() будут всегда. эти функции дословно означают - положить элемент в массив или забрать. при этом массив растёт, либо уменьшается. чистое поведение регистров. а в какой позиции регистра надо быть, чтобы получить первый элемент массива? конечно, в позиции ноль, ведь мы в него ещё не вошли. чтобы добраться до второго элемента - надо передвинуть считывающую головку на одну [1] позицию вглубь. всё очень даже логично. сделать конвертор из системы 1,2,3... в систему 0,1,2... конечно не сложно, но когда мы говорим о машинной логике, то эффективность выходит на первое место. |
|||
|
||||
mimik |
|
|||
не Rohoss Я Профиль Группа: Участник Сообщений: 69 Регистрация: 1.11.2010 Репутация: нет Всего: 2 |
и всё-таки аргументы в пользу индексации массивов с 0, имхо, я не услышал
нет, это задача компилятора, я пишу array[2], а компилятор сам сделает array[1] Это сообщение отредактировал(а) mimik - 8.11.2010, 18:54 |
|||
|
||||
bilbobagginz |
|
|||
Naughtius Maximus Профиль Группа: Экс. модератор Сообщений: 8813 Регистрация: 2.3.2004 Где: Israel Репутация: 6 Всего: 317 |
mimik,
термин массив существует не только для языков высокаго уровня как Lisp/Java и т.д., но и для языков такого низкаго уровня как ассембли. для того, чтобы не пояснять людям, изучающим информатику, что у одного языка индексация с 1 а у другого - 0, довольно умное решение вопроса - определить что такое массив концептуально, т.е. эстетическая причина. Кроме того, в языках, работающих с памятью (без автоматических освободитлей мусора и т.д.), частенько удобно "шагать" через адреса посредством так называемой "арифметики указателей". Если бы первый элемент массива "A" был обозначен как "A+1" это намного некрасивее. (т.е. причина комфортабельности) С другой стороны можно было бы создать синтаксис, что если ты уже используешь арифметику указателей, т.е. разделитсь семантику A[i] от *(A+i), то нередко пришлось бы делать и без того уродливый синтаксис еще менее читабельным. т.е. для единства подходов напр. в языке Си имеет смысл сделать и ту и другую нотации похожими (опять же, эстетика) Третья причина образовательная: инженер разработчик не "просто человек", а должен помнить об адресации памяти компьютера. даже если он работает на языках высокаго уровня, ибо нефиг. -------------------- Я ещё не демон. Я только учусь. |
|||
|
||||
mimik |
|
||||
не Rohoss Я Профиль Группа: Участник Сообщений: 69 Регистрация: 1.11.2010 Репутация: нет Всего: 2 |
а сейчас разве не так? открываю почти любую книгу и читаю что-то типо такого: помните что индексация массивов начинается с нуля
имхо, никак не связано имхо, массивы это одно, а работа с памятью другое, хотя в некоторых языках это эквивалентно, что не есть гуд |
||||
|
|||||
baldina |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: нет Всего: 101 |
mimik, Вам уже описали и преимущества, и логику. Повторюсь:
преимущества. не надо делать лишних усилий компилятору (да и программисту), переходя от обывательского понимания "первый" к математическому. меньше преобразований -> проще -> надежнее логика. зависит от взгляда на массив и индексацию. если рассматривать индекс как смещение, то использовать ноль для индекса первого элемента логичнее, чем единицу. Вы просто не привыкли. Операции вроде += в С/С++ тоже поначалу вызывают недоумение, неудобство, излишнее напряжение мысли. А когда втягиваешься, напрягать начинает a = a + b Привыкнете, человек ко всему привыкает ;-) |
|||
|
||||
mimik |
|
|||
не Rohoss Я Профиль Группа: Участник Сообщений: 69 Регистрация: 1.11.2010 Репутация: нет Всего: 2 |
почему это так работает я понял, а преимущества я не увидел (index - 1) вроде ничего сложного я уже привык к этому синтаксису, но хочется писать для людей, а не для компилятора Это сообщение отредактировал(а) mimik - 8.11.2010, 20:38 |
|||
|
||||
bilbobagginz |
|
|||
Naughtius Maximus Профиль Группа: Экс. модератор Сообщений: 8813 Регистрация: 2.3.2004 Где: Israel Репутация: 6 Всего: 317 |
если вам это настолько мешает, и считаете что это имеет смысл, напишите свой ЯП, свой компилятор и отладчик. А потом посмотрите как хорошо он "пойдет", если пойдет - флаг в руки, респект, и т.д. Удачи. -------------------- Я ещё не демон. Я только учусь. |
|||
|
||||
Фантом |
|
|||
Вы это прекратите! Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: нет Всего: 49 |
Вообще-то в нормальных языках, в которых есть массивы, индексация может начинаться откуда угодно, более того, индекс нередко вообще может быть и не целым числом.
Фиксированное начало индексации есть в тех языках, где есть не столько массивы, сколько области памяти с указателями на них. Там - именно из-за адресной арифметики - действительно проще начинать с нуля. |
|||
|
||||
skyboy |
|
|||
неОпытный Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 1 Всего: 260 |
мы по-прежнему говорим о массивах? Или о мапах/хешах/гридах с синтаксисом таким же, как и у массивов? преимуществ чего? одной записи над другой? я вот не вижу преимуществ использования знака "+" для операции сложения. нашел, в чем искать просто оптимизации. я понимаю ещё - протестовать против неопределенностей вроде "++n++". забудь, прими как данность. в Pascal/Delphi - вон с единицы нумерация. |
|||
|
||||
Правила ведения Религиозных войн | |
|
1. Уважайте собеседника 2. Собеседник != враг 3. Старайтесь воздерживаться от тем вида "Windows Rulez" или "Linux Rulez" С уважением, Smartov. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Религиозные войны | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |