第27課 數組的本質分析

數組的概念
·數組是相同類型的變量的有序集合
image.png數組

數組的大小
·數組在一片連續的內存空間中存儲元素
·數組元素的個數能夠顯示或隱式指定
image.png
1.a[2] a[3] a[4]的值爲0;
2.b包含了2個元素spa

數組地址與數組名
·數組名錶明數組首元素的地址
·數組的地址須要用取地址符&才能獲得
·數組的首元素的地址值與數組的地址值相同
·數組首元素的地址與數組的地址是兩個不一樣的概念指針

例子27-2:code

include"stdio.h"

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

include"stdio.h"

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

小結:·數組是一片連續的內存空間·數組的地址和數組首元素的地址意義不一樣·數組名在大多數狀況下被當成常量指針處理·數組名其實並非指針,不能將其等同於指針

相關文章
相關標籤/搜索