天天看點

【C語言進階剖析】27、數組的本質分析

1 數組的概念

2 數組的大小

3 數組位址與數組名

4 數組名的盲點

5 小結

數組是相同類型的變量的有序集合

【C語言進階剖析】27、數組的本質分析

數組在一片連續的記憶體空間中存儲元素

數組元素的個數可以顯示或隐式指定

如下定義兩個數組 a 和 b

【C語言進階剖析】27、數組的本質分析

有兩個問題?

a[2],a[3],a[4] 的值是多少?

b 包含了多少個元素?

下面我們就來實際操作一下:

可以看到數組 a 隻初始化了前兩個元素,後面三個元素沒有初始化,自動初始化為 0。 數組 a 的長度為 20 位元組,裡面儲存了 5 個 int 型的資料類型,數組 b 元素的個數被隐式初始化,根據元素的個數确定數組長度,是以數組 b 長度為 2,裡面有兩個 int 型的變量。 求解數組長度的方法:數組長度除以單個元素長度 sizeof(a)/sizeof(a[0]) 如果想将數組所有元素都初始化為 0,可以這麼寫: int a = { 0 }; 也就是第一個元素初始化為 0,後面的預設初始化,也是 0

數組名代表數組首元素的位址

數組的位址需要用取位址符 & 才能得到

數組首元素的位址值與數組的位址值相同

數組首元素的位址與數組的位址是兩個不同的概念

數組名就是數組首元素的位址,是以 a 和 &a[0] 是一樣的。 數組的位址指的是整個數組的位址,數值上等于數組首元素的位址,但是含義是不一樣的。數組首元素的位址表示第一個元素的位址,一共隻有一個元素,數組的位址表示整個數組的位址,一共有 5 個元素。這就好比是你家住小區第一戶,你家的編号和小區編号一樣,但是不能說整個小區都是你家。

數組名可以看做一個常量指針

數組名“指向”的是記憶體中數組首元素的起始位置

數組名不包含數組的長度資訊

在表達式中數組名隻能作為右值使用

隻有在下列場合中數組名不能被看作常量指針

數組名作為 sizeof 操作符的參數

數組名作為 & 運算符的參數

為了更好的差別指針與數組,下面看個例子

不管數組大小如何變化,指針永遠是 8 個位元組(64位系統),指針與數組完全不是一概念

1、數組是一片連續的記憶體空間

2、數組的位址和數組首元素的位址意義不同

3、數組名在大多數情況下被當作常量指針處理

4、數組名其實并不是指針,不能将其等同于指針