sizeof ()(2)

1、對於上次數組有關sizeof的解析如下:


//一維數組


int a[] = { 1, 2, 3, 4 };   

printf("%d\n", sizeof(a));  // 這裏 a代表數組首元素地址,sizeof(a)求得是整個數組                                        的長度:16

printf("%d\n", sizeof(a + 0));//  a+0代表指向數組第一個元素的指針,即&a[0]:4

printf("%d\n", sizeof(*a));//  *a代表解引用首元素地址的元素,即a[0]:4

printf("%d\n", sizeof(a + 1));//  a+1代表指向數組第二個元素的指針,即&a[1]:4

printf("%d\n", sizeof(a[1]));//  a[1]代表數組第二個元素:4

printf("%d\n", sizeof(&a)); //  &a代表取整個數組的地址,其值和a相同,即&a[0]:4

printf("%d\n", sizeof(&a + 1));//&a+1代表指向整個數組下一個位置的指針,指向了元素4                                           後面的那個地址,仍是一個指針:4

printf("%d\n", sizeof(&a[0]));//&a[0]代表取第一個元素的地址,同&a:4

printf("%d\n", sizeof(&a[0] + 1));// &a[0]+1代表指向第二個元素的指針,即指向a[1]的                                               指針:4


//二維數組

int a[3][4] = { 0 };


printf("%d\n", sizeof(a));   //  同上,求的是整個數組的長度:48

printf("%d\n", sizeof(a[0][0]));//a[0][0]代表第一個元素:

printf("%d\n", sizeof(a[0]));//  a[0]代表第一維,是一個數組名,而它的元素是四個整                                            形,所以a[0]同一維數組中的數組名一樣:16

printf("%d\n", sizeof(a[0] + 1));//a[0]+1代表指向a[0][1]的指針,即&a[0][1]:4

printf("%d\n", sizeof(a + 1));// a+1,a是指向數組首元素(這裏是第一維,將a看成一個一                    維數組)的地址,所以a+1就指向了第二個數組元素(即第二維),是一個指針:4  

printf("%d\n", sizeof(&a[0] + 1));// 同上,因爲&a[0]即是a:4

printf("%d\n", sizeof(*a));// *a代表*(a+0),即a[0]:16

printf("%d\n", sizeof(a[3]));//  a[3]即 *(a+3),是個數組名,同上,只不過在這裏,                                          越界,指向了第四行:16 

2、總結如下:

理解數組方法如:先用一維數組說明,

《1》數組名:永遠表示指向數組首元素的地址;

例1:int a[10];

      a代表指向數組首元素的地址,唯有在兩個地方不同,(1)sizeof(a)代表求整個數組的長度;(2)&a 代表數組的地址,即是一個指向數組的指針,除此之外都代表數組首元素的地址。

《2》下標的運算

例2:a+1  代表的是指向第二個元素的指針,因爲a是首元素地址,以此爲長度基準增加1,即指向了第           二個元素

    注:下標運算增減的長度都是根據前一個變量所表示的量爲基準增減量。

《3》多維數組

多維數組所有的規則同一維數組一樣,只是將多維數組看成了一維數組,其中的元素又是數組而已。

例3:int a[3][4];

    可以將其看成一個一維數組,有三個元素a[0],a[1],a[2],不同的是這三個元素的值又是數組,每個數組有四個int元素,所以,a[0],a[1],a[2]又可以看成是三個數組名了

綜上,根據以上規則,即可理解上面代碼中的各種變換,數組的深入理解很重要。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章