數組的概念
·數組是相同類型的變量的有序集合
數組
數組的大小
·數組在一片連續的內存空間中存儲元素
·數組元素的個數能夠顯示或隱式指定
1.a[2] a[3] a[4]的值爲0;
2.b包含了2個元素spa
數組地址與數組名
·數組名錶明數組首元素的地址
·數組的地址須要用取地址符&才能獲得
·數組的首元素的地址值與數組的地址值相同
·數組首元素的地址與數組的地址是兩個不一樣的概念指針
例子27-2:code
int main()
{blog
int a[5] = { 0 }; printf("a = %p\n",a); printf("&a = %p\n",&a); //雖然都是首地址,可是長度不一樣 printf("&a[0] = %p\n",&a[0]); return 0;
}
輸出結果:
a = 012FF888
&a = 012FF888
&a[0] = 012FF888
a與&a雖然輸出結果相同,都是首地址,可是&a的長度不一樣。內存
數組名的盲點
·數組名能夠看作一個常量指針
·數組名「指向」的是內存中數組首元素的起始地址
·數組名不包含數組的長度信息
·在表達式中數組名只能做爲右值使用it
·只有在下列場合中數組名不能看作常量指針
-數組名做爲sizeof操做符的參數
-數組名做爲&運算符的參數io
例子27-3:class
int main()
{變量
int a[5] = { 0 }; int b[2]; int* p = NULL; p = a; printf("a = %p\n",a); printf("p = %p\n",p); printf("&p = %p\n",&p); printf("&sizeof(a) = %d\n",sizeof(a)); printf("&sizeof(p) = %d\n",sizeof(p)); printf("\n"); p = b; printf("b = %p\n",b); printf("p = %p\n",p); printf("&p = %p\n",&p); printf("&sizeof(b) = %d\n",sizeof(b)); printf("&sizeof(p) = %d\n",sizeof(p));
}
輸出結果:
a = 0087F9E4
p = 0087F9E4
&p = 0087F9C8
&sizeof(a) = 20
&sizeof(p) = 4
b = 0087F9D4
p = 0087F9D4
&p = 0087F9C8
&sizeof(b) = 8
&sizeof(p) = 4
小結:·數組是一片連續的內存空間·數組的地址和數組首元素的地址意義不一樣·數組名在大多數狀況下被當成常量指針處理·數組名其實並非指針,不能將其等同於指針