Как именно работает индексация в массивах?

Какое направление для аутсорсинга программного обеспечения Изучение

Во-первых, давайте разберемся с массивами. Это набор элементов, хранящихся в смежных местах памяти. Основная идея состоит в том, чтобы хранить несколько элементов одного типа вместе, к которым можно получить доступ по индексу/ключу (число).

Непрерывная память объявленного размера выделяется в куче/стеке, а затем адрес элемента вычисляется математически во время выполнения как:

element address = (base address) + (element index * size of a single element)

  • Базовый адрес: это адрес элемента с индексом 0 или расположение первого элемента массива в памяти. Компилятор знает этот адрес как расположение массива в памяти.
  • Индекс элемента: это порядковый номер (индекс/ключ), присвоенный элементу, где первому элементу массива присвоено значение 0. Его также можно определить как количество элементов, предшествующих этому конкретному элементу в массиве.
  • Размер одного элемента: элементы в массиве должны быть одного типа данных или объекта. Размер отдельного элемента — это количество байтов, необходимое в памяти для хранения одного такого элемента.

Например:

Для типа Int требуется 4 байта (32 бита), для типа
char требуется 1 байт (8 бит), для типа
long требуется 8 байт (64 бита) и т. д.

Пример реализации выше:

int arr[6] = {3, 4, 7, 9, 7, 1}
address of arr[0] (base address) = 0 x 61fe00
address of arr[3] (element address) = (base address) + (element index * size of a single element)
0 x 61fe00 + ( 3 * 4) = 0 x 61fe0c
Here, size of a single element is 4-bytes as it is int- type array.

long long arr[6]={100, 12, 123, 899,124, 849}
address of arr[0] (base address) = 0x61fdf0
address of arr[3] (element address) = (base address) + (element index * size of a single element)
0x61fdf0 + ( 3 * 8) = 0x61fe08
Here, size of a single element is 8-bytes as it is long – type array.

Примечание. Здесь адреса имеют шестнадцатеричный формат.

Давайте посмотрим на его реализацию через программу для печати адресов элементов массива:

С++

// Program to show how indexing works
#include <iostream>
 
using namespace std;
 
int main() {
    int arr[6] = {3,4,7,9,7,1};
    cout << "Base address:- " << (&arr) << endl;
    cout << "Element address at index 3:- " << (&arr[3]) << endl;
    return 0;
}

Выход

Base address:- 0x7ffc64918c30
Element address at index 3:- 0x7ffc64918c3c

Читайте также:  Ruby Tutorial: изучите Ruby с нуля
Оцените статью
bestprogrammer.ru
Добавить комментарий