Независимо от того, используете ли вы код на JavaScript, Python, Java, PHP, Ruby или Go, для доступа к первому элементу массива вам нужно будет обратиться к array[0]. Это часто сбивает с толку новых разработчиков — почему мы начинаем нумерацию с нуля? Не будет ли array[1] более очевидным выбором для первого элемента?

Во-первых, стоит отметить, что не каждый язык программирования следует нумерации с нуля. Прежде чем я решил написать этот пост, я знал о том, что lua нарушает это соглашение. Но я был очень удивлен, обнаружив, что это не такое редкое явление.

AWK, COBOL, Fortran, R, Джулия, Lua, MATLAB, Smalltalk, Wolfram Language

Во всех этих языках индекс по умолчанию для первого элемента в массиве равен единице.

(Полный список можно найти в Википедии).

Наиболее распространенный ответ на вопрос о нумерации массивов указывает на то, что нумерация с нуля происходит от самого языкового дизайна. В «C» массив указывает на местоположение в памяти, поэтому в выражении «array [n]» n следует рассматривать не как индекс, а как смещение от заголовка массива.

Ссылка на память по адресу и смещению представлена непосредственно в компьютерном оборудовании практически на всех компьютерных архитектурах, поэтому эта деталь конструкции в «C» облегчает компиляцию…

https://en.wikipedia.org/wiki/Zero-based_numbering
#include <stdio.h>int main()

{
    int data[6] = {1, 2, 3, 4, 5, 6};
    int i = 0;
    printf("Array address: %p\n", data);
    do {
        printf("Array[%u] = %p\n", i, (void *)(&amp;data[i]));
        i++;
    } while(i < 6);
}

Output:

Array address: 0x7ffe9472bad0
Array[0] = 0x7ffe9472bad0
Array[1] = 0x7ffe9472bad4
Array[2] = 0x7ffe9472bad8
Array[3] = 0x7ffe9472badc
Array[4] = 0x7ffe9472bae0
Array[5] = 0x7ffe9472bae4

Как видно из этого примера, первый элемент и сам массив указывают на одно и то же место в памяти, поэтому он находится на расстоянии 0 элементов от местоположения самого массива.

About the Author

Ergashev Lazizbek

Добрый день, дорогие мои читатели, позвольте мне рассказать вам немного о себе. Я Лазизбек Эргашев, я веб-разработчик из Узбекистана. В основном я использую laravel/php для бэкэнда и vuejs/javascript для фронтэнда. Основная цель моего блога - поделиться с вами своим опытом и знаниями.

View All Articles