陣列的長度,C語言獲取陣列長度詳解

2020-07-16 10:04:24
如何通過程式設計的手段獲取某個陣列的長度呢?

答案是使用關鍵字 sizeof。

前面說過,用 sizeof 可以獲得資料型別或變數在記憶體中所佔的位元組數。同樣,用 sizeof 也可以獲得整個陣列在記憶體中所佔的位元組數。因為陣列中每個元素的型別都是一樣的,在記憶體中所佔的位元組數都是相同的,所以總的位元組數除以一個元素所佔的位元組數就是陣列的長度。

那麼如何用 sizeof 獲得陣列總的位元組數呢?只要對陣列名使用 sizeof,求出的就是該陣列總的位元組數。下面寫一個程式看一下:
# include <stdio.h>
int main(void)
{   
    int a[10] = {0};
    printf("sizeof(a) = %dn", sizeof(a));
    return 0;
}
輸出結果是:
sizeof(a) = 40

陣列 a 是 int 型的,每個元素佔 4 位元組,所以長度為 10 的陣列在記憶體中所佔的位元組數就是 40。而總的位元組數除以一個元素所佔的位元組數就是陣列的長度,如下面這個程式:
# include <stdio.h>
int main(void)
{   
    int a[10] = {0};
    int cnt = sizeof(a) / sizeof(a[0]);
    printf("cnt = %dn", cnt);
    return 0;
}
輸出結果是:
cnt = 10

這樣不管陣列是增加還是減少元素,sizeof(a)/sizeof(a[0]) 都能自動求出陣列的長度。需要注意的是,它求出的是陣列的總長度,而不是陣列中存放的有意義的資料的個數。比如定義一個int型的陣列:
int a[10] = {1, 2, 3, 4, 5};
我們只初始化了五個元素,但是 sizeof(a)/sizeof(a[0]) 求出的是 10,而不是 5。換句話說,我們無法通過 sizeof(a)/sizeof(a[0]) 求出陣列中有多少個有意義的資料。