成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

為什么數組的下標從 0 開始?

開發
數組在計算機內存中實現為連續存儲,首地址對應下標 0,具體元素的下標,就可以直接表示為相對首地址的偏移量。

示例代碼

因為現代化的高級編程語言,基本只能使用 array[index] 來操作數組指定的索引,所以這里使用 C 語言,展示一下更 “原始的方法” 操作數組的魅力。

#include <stdio.h>

int main(void) {
    int arr[] = {1, 2, 3, 4, 5};
    int n = sizeof(arr) / sizeof(arr[0]);

    for (int i = 0; i < n; i++) {
        // *(arr + i) 相當于 arr[i]
        //  (arr + i) 是第 i 個元素的地址
        printf("Element %d: value = %d, address = %p\n",
               i,
               *(arr + i),
               (void *)(arr + i));
    }

    return0;
}

// 你的輸出地址和這里的不一樣,屬于正常現象

Element 0: value = 1, address = 0x16d65adc0
Element 1: value = 2, address = 0x16d65adc4
Element 2: value = 3, address = 0x16d65adc8
Element 3: value = 4, address = 0x16d65adcc
Element 4: value = 5, address = 0x16d65add0

歷史原因

這應該是主要原因。

計算機較為早期的編程語言,例如 BCPL, 使用 0 作為數組開始的下標,然后 C 語言沿襲了這個設計來簡化編譯過程,再來后來的高級語言 (Java, Python) 等為了兼顧歷史,全部延續了 C 語言的慣例,所以最終也就變成了一個約定俗成的特性。

性能優化

這個優化主要體現在計算機內存尋址效率上,因為數組的訪問依賴于內存地址的計算,具體來說,如果使用變量 base 來表示數組的地址:

(1) 當下標從 0 開始時:

  • arr[0] 就表示數組首個元素的地址
  • arr[k] 就表示從數組首元素開始,偏移 k 個元素的地址,偏移量為數據類型 typeSize 的大小

(2) 但是當下標從 1 開始時:

  • arr[1] 就表示數組首個元素的地址
  • arr[k] 就表示從數組首元素開始,偏移 k - 1 個元素的地址,偏移量為數據類型 typeSize 的大小為 4

通過對比兩個尋址公式可以看到,如果數組下標從 1 開始,每次隨機訪問數組元素時,都會增加 1 個額外的減法運算,也就是多了 1 條 CPU 減法指令,高頻訪問場景下會造成略微的性能差異。

內存模型

數組在計算機內存中實現為連續存儲,首地址對應下標 0,具體元素的下標,就可以直接表示為相對首地址的偏移量。這樣,可以和物理內存地址從 0 開始編號,保持相同的邏輯抽象語義。

數學邏輯與半開區間優勢

在數學中,序列索引常從 0 開始(如離散數學中的 0 到 n-1 定義)。編程語言中,半開區間( 例如 Python 的切片 arr[0:n] 表示前 n 個元素)比閉區間的表示方式更簡潔。如果下標從 1 開始,表示方式就變為 arr[1:n+1],增加不必要的復雜度。

責任編輯:趙寧寧 來源: 洋芋編程
相關推薦

2021-07-09 06:48:29

數組存儲內存

2014-02-01 21:25:08

Python數組

2022-05-24 08:31:05

C語言檢查數組

2023-11-04 16:26:18

C語言數組

2020-12-14 08:00:31

計算機計數程序

2024-02-06 09:55:33

框架代碼

2015-05-29 11:14:31

程序員開始看書

2023-03-29 08:52:58

視覺Vue組件庫

2022-11-26 00:34:57

數組Java程序

2022-08-31 14:24:03

數字化轉型小程序平臺

2024-06-07 09:13:23

2019-04-22 09:58:25

C語言Web操作系統

2022-08-12 21:40:41

FedoraCC0許可證

2016-11-21 15:22:47

GitHub操作開源

2018-05-23 15:20:08

區塊鏈數字貨幣比特幣

2019-01-29 14:29:03

微服務路由

2013-01-22 09:35:27

Hadoop存儲

2023-03-01 07:37:10

數組鏈表性能

2011-07-03 18:28:13

網站優化

2017-02-07 09:37:46

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日日摸天天添天天添破 | 亚洲美女av网站 | 五月综合激情在线 | 91观看| 亚洲国产欧美在线 | 亚洲导航深夜福利涩涩屋 | 中文字幕av网站 | 一级美国黄色片 | 精品一区久久 | 狠狠色综合网站久久久久久久 | 久久国产精品免费一区二区三区 | 91精品综合久久久久久五月天 | 久久久不卡网国产精品一区 | 亚洲精品天堂 | 99色在线视频 | 男女激情网 | 麻豆久久久久久久 | 特级丰满少妇一级aaaa爱毛片 | 毛片av免费看 | 日本午夜免费福利视频 | 欧美黄a| 国产高清在线精品一区二区三区 | 精品免费国产视频 | 欧美成人一级 | 欧美精品三区 | 日韩一级免费电影 | 狠狠视频| 中文字幕精品一区二区三区精品 | 欧美成人免费电影 | 久久久日韩精品一区二区三区 | 浮生影院免费观看中文版 | 久久伊人青青草 | 天堂视频一区 | 成人做爰69片免费观看 | 日韩在线视频一区 | 自拍偷拍精品 | 欧美国产日韩精品 | 久久精品小视频 | 日日天天| 亚洲精品一二区 | 亚洲欧美日韩网站 |