索引在数组中是如何工作的?

155 阅读2分钟

索引在数组中到底是如何工作的?

首先,让我们了解一下数组,它是存储在连续内存位置的项目的集合。其基本思想是将同一类型的多个项目存储在一起,可以通过 索引/键(一个数字)进行访问。

申报大小的连续内存被分配在堆/栈上,然后在运行时以数学方式计算元素的地址:-

元素地址=(基础地址)+(元素索引*单个元素的大小)。

其中。

  • 基准地址。它是索引为0的元素的地址,或者说是内存中数组第一个元素的位置。编译器知道这个地址是数组的内存位置。
  • 元素索引。它是分配给元素的序列号(索引/键),其中数组的第一个元素被分配为0。它也可以定义为数组中该特定元素之前的元素数。
  • 单个元素的大小。阵列中的元素需要是相同的数据类型或对象。单个元素的大小是指内存中存储该种单个元素所需的字节数。

比如说。

Int类型需要4字节(32位)
char类型需要1字节(8位)
long类型需要8字节(64位)等。

上述实现的例子。

int arr[6] = {3, 4, 7, 9, 7, 1}
arr[0]的地址(基址)= 0 x 61fe00
arr[3]的地址(元素地址)=(基址)+(元素索引*单个元素的大小)
0 x 61fe00 + ( 3 * 4) = 0 x 61fe0c
这里,单个元素的大小为4字节,因为它是int型数组。

long long arr[6]={100, 12, 123, 899,124, 849}
arr[0]的地址(基址)=0x61fdf0
arr[3]的地址(元素地址)=(基址)+(元素索引*单个元素的大小)
0x61fdf0 + ( 3 * 8) = 0x61fe08
这里,单个元素的大小是8字节,因为它是长-型阵列。

注意:这里的地址是十六进制的。

让我们通过一个打印数组元素地址的程序来看看它的实现。

C++

// 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