一、數組的概念數組
數組是相同類型的變量的有序集合spa
int a[5];指針
數組包含5個int類型的數據code
a表明數組第一個元素的起始地址,這20個字節的名字爲a。a[0], a[1]等都是a中的元素,並不是元素的名字,數組中的元素沒有名字。每一個元素都是int型數據。orm
二、數組的大小內存
# 數組在一片連續的內存空間中存儲元素編譯器
# 數組元素的個數能夠顯式或隱式指定string
#include <stdio.h> #include <string.h> int main() { int a[5] = {1, 2}; //剩餘的三個元素,編譯器會初始化爲0,這是編譯器的行爲 int c[5]; int d[5] = {0}; //這裏對數組進行了初始化,巧妙的運用了編譯器特性, //它會自動對未定義數組元素初始化爲0 int b[] = {1, 2}; int i; //memset(c, 0, sizeof(c)); //這個不是初始化,是對數組賦值 printf("%d, %d \n", sizeof a, sizeof a/sizeof *a); printf("%0x, %0x \n", a, &a); printf("%d, %d \n", sizeof b, sizeof b/sizeof *b); for(i = 0; i < 5; i++) { printf("%d\n", a[i]); } for(i = 0; i < 5; i++) { printf("%d\n", c[i]); } for(i = 0; i < 5; i++) { printf("%d\n", d[i]); } return 0; }
運行結果:it
20, 5
22ff38, 22ff38
8, 2
1
2
0
0
0
2008950864
-1
2009091625
2009091650
4200820
0
0
0
0
0io
三、數組地址與數組名
# 數組名錶明數組首元素的地址
# 數組的地址須要用取地址符&才能獲得
# 數組首元素的地址值與數組的地址值相同
# 數組首元素的地址與數組的地址是兩個不一樣的概念
你家所在的樓房和你家的GPS地址相同,但意義不一樣。
四、數組名的盲點
# 數組名能夠看作一個常量指針
# 數組名「指向」的是內存中數組首元素的起始位置
# 在表達式中數組名只能做爲右值使用
# 只有在下面場合中數組名不能看作常量指針
一、數組名做爲sizeof操做數的參數時,它表明整個數組,而非首元素的常量指針
二、數組名做爲&的參數,它表明整個數組,因此&a(a爲一個數組)表示數組地址。
數組小結
# 數組是一片連續的內存空間
# 數組的地址和數組首元素的地址意義不一樣
# 數組名在大多數狀況下被當成常量指針處理
# 數組名其實並非指針,在外部聲明時不能混淆