Это ведь неудобно, часто путаешься, если работаешь в каком-нибудь сложном проекте где много циклов.
С чем связано это решение, что начальный индекс первого элемента массива равен 0?
C#
Почему в C# нумерация (индексы) элементов массива начинаются с нуля, а не с единицы?
Потому что ноль тоже число в памяти если его не использовать то слишком расточительно. Двоичная логика основана на нуле и на единице.
Триггер, транзисторный ключ имеет ноль и один состояния. Поэтому ноль везде используется. И это не только в шарпе. Это в любой ЭВМ.
Триггер, транзисторный ключ имеет ноль и один состояния. Поэтому ноль везде используется. И это не только в шарпе. Это в любой ЭВМ.
Потому что абсолютно везде и всегда они начинаются с нуля. Это позволяет серьезно сэкономить на расчете индексов.
Ненулевой (и даже не цифровой) начальный индекс позволяли задавать только некоторые древние языки, вроде паскаля и фортрана. Что было в некоторых случаях удобно, но либо медленно, либо требовало некоторых выравниваний таких массивов, жравших память.
>если работаешь в каком-нибудь сложном проекте
Если ты используешь в сложных проектах массивы, то мне тебя жаль. C# поддерживает огромное количество удобных и современных структур данных, а ты все на массивах сидишь...
Ненулевой (и даже не цифровой) начальный индекс позволяли задавать только некоторые древние языки, вроде паскаля и фортрана. Что было в некоторых случаях удобно, но либо медленно, либо требовало некоторых выравниваний таких массивов, жравших память.
>если работаешь в каком-нибудь сложном проекте
Если ты используешь в сложных проектах массивы, то мне тебя жаль. C# поддерживает огромное количество удобных и современных структур данных, а ты все на массивах сидишь...
Gheorghe Popa
И чем плохи массивы в сложных проектах? Если они там нужны, то именно их и надо использовать.
1. В памяти массив начинается с нуля, потому что есть адрес массива, а смещение от него на 1 это уже второй элемент.
2. Так сложилось исторически и C# наследовал подходы его предшественников: C, C++, Java и т. д.
3. Сегодня сделать индексацию массива, начиная с единицы, не составляет проблем, потому что один лишний байт памяти сегодня погоды не делает, но уже все привыкли и многие начнут плеваться. В пайтон были попытки и буйные драчки на этот счет.
2. Так сложилось исторически и C# наследовал подходы его предшественников: C, C++, Java и т. д.
3. Сегодня сделать индексацию массива, начиная с единицы, не составляет проблем, потому что один лишний байт памяти сегодня погоды не делает, но уже все привыкли и многие начнут плеваться. В пайтон были попытки и буйные драчки на этот счет.
Никто не путается кроме нубов, которые с паскаля пересели.
Потому что ноль первая цифра
И компы работают на бинарном коде
И компы работают на бинарном коде
Олег Савинкин
судя по твоему ответу если тебя попросят яблоки посчитать и на столе будет 3 яблока, то ты насчитаешь 2, потому что ноль это первая цифра.
тебе бы бухгалтером работать
тебе бы бухгалтером работать
Ну, если тебе это тебе это так сильно мешает то всегда можно извратиться и сделать что-то такое... (скрин). Вот только полезность данного решения вызывает сомнения.
Да и к тому же, есть огромное количество различных структур данных вместо массивов, пользоваться которыми в разы удобнее, чем городить такое...
Код: https://pastebin.com/Mn2hEnUD

Да и к тому же, есть огромное количество различных структур данных вместо массивов, пользоваться которыми в разы удобнее, чем городить такое...
Код: https://pastebin.com/Mn2hEnUD

Это скорее всего связано с тем, что синтаксис данного языка основан на C, в котором обращение к элементу массива выглядит следующим образом:
A[k] - элемент k массива A. Однако компилятор это интерпретирует несколько иначе. Массив - набор элементов, находящийся в памяти последовательно - один за другим. A - адрес первого элемента, k - смещение относительно данного элемента. Данная интерпретация массивов стала стандартом.
A[k] - элемент k массива A. Однако компилятор это интерпретирует несколько иначе. Массив - набор элементов, находящийся в памяти последовательно - один за другим. A - адрес первого элемента, k - смещение относительно данного элемента. Данная интерпретация массивов стала стандартом.
Алексей Долгалёв
Ну дык почему адрес первого элемента не может быть 1? Может это просто связано с бинарной системой, на которой комп и работает
Евгений Ильин
И где в вашем ответе ноль? Нулевой индекс?
Потому что долбoeбы эту xyету писали, а мы мучаемся.
Потому, что имя массива является указателем на адрес первого элемента в массиве = адрес_массива + 0*(кол-во байт типа), то есть первый элемент, второй элемент = адрес_массива + 1*(кол-во байт типа) = array[0+1]=array[1], третий соответственно = адрес_массива + 2*(кол-во байт типа). Поэтому собственно нельзя добавлять в массивы разные типы данных, поскольку программа не может просчитать заранее сколько памяти нужно под массив, под int 4 байта, под short 2 байта.
Похожие вопросы
- C#. Как вернуть индекс определенного элемента массива?Почему ошибка?
- C# Массив структур.Конструктор .Доступ к отдельным элементам массива в массиве структур.
- Как можно найти одинаковые элементы массива? С#
- Индексы с массивами С#
- C#. Задание с двумерным массивом.
- Почему в C# логические операторы имеют именно такой вид (||, |, &&, &, !)
- Помогите написать программу с массивом на C#
- Задача массивы c# , прошу помощи...
- Сортировка Двумерного массива C#
- Посоветуйте пожалуйста книгу, для изучения языка программирования C#, с полного нуля, заранее спасибо!