Это довольно волшебно.
Я имею в виду, , почему вы получаете доступ к 6-му элементу? Какая семантика должна применяться к этому числу? В его нынешнем виде все, что мы знаем, это «6-е (от нуля) число». Если бы мы знали объявление arrayOfNumbers
, мы бы также знали его тип (например, int
или double
).
Но если бы вы сказали:
arrayOfNumbers[kDistanceToSaturn];
... теперь это имеет гораздо большее значение для тех, кто читает код.
Как правило, каждый выполняет итерацию по массиву, выполняя некоторую операцию с каждым элементом, потому что он не знает, каков размер массива, и вы не можете просто получить к нему доступ жестко закодированным способом.
Однако иногда элементы массива имеют специфическое значение, например, в графическом программировании. Иногда массив всегда имеет один и тот же размер, потому что этого требуют данные (например, определенные матрицы преобразования). В этих случаях может быть или не быть нормальным доступ к конкретному элементу по номеру: эксперты по доменам будут знать, что вы делаете, но, вероятно, не будут универсалы. Присвоение магического индекса имени делает его более очевидным для тех, кто должен поддерживать ваш код, и помогает предотвратить случайный ввод неправильного номера.
В моем примере выше я предположил, что ваш массив содержит расстояния от Солнца до планеты. Солнце было бы нулевым элементом, поэтому arrayOfNumbers [kDistanceToSun] = 0. Тогда при увеличении каждый элемент содержит расстояние до следующей самой далекой планеты: ртути, Венеры и т. Д. Это гораздо удобнее для чтения, чем просто набрать номер Планета, которую вы хотите. В этом случае массив имеет фиксированный размер, потому что есть фиксированное количество планет (ну, кроме всего разгрома Плутона).
Другая проблема заключается в том, что "arrayOfNumbers" ничего не говорит нам о содержимом массива. Мы уже знаем, что это массив чисел, потому что мы видели объявление где-то, где вы сказали int arrayOfNumers[12345];
или как вы его объявили. Вместо этого что-то вроде:
int distanceToPlanetsFromSol[kNumberOfPlanets];
... дает нам гораздо лучшее представление о том, что собой представляют данные и какова их семантика. Одна из ваших целей как программиста должна заключаться в написании кода, который самодокументируется таким образом.
И тогда мы можем поспорить в другом месте, если kNumberOfPlanets
должно быть 8 или 9. :)