Во-первых, давайте разберемся с массивами. Это набор элементов, хранящихся в смежных местах памяти. Основная идея состоит в том, чтобы хранить несколько элементов одного типа вместе, к которым можно получить доступ по индексу/ключу (число).
Непрерывная память объявленного размера выделяется в куче/стеке, а затем адрес элемента вычисляется математически во время выполнения как:
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