1. 程式人生 > >c語言陣列、sizeof()及strlen()

c語言陣列、sizeof()及strlen()

printf("%p\n", &a);
printf("%p\n", &a+1);
printf("%d\n", sizeof(*&a));
//&a表示整個陣列的地址,加上*表示整個陣列,這是一個包含四個元素的整型陣列,所以佔16個位元組。


printf("%d\n",sizeof(a));//16
//陣列名單獨放到sizeof中時代表整個陣列,因此sizeof(a)代表整個陣列所佔的記憶體,而這個陣列a是一個整型陣列每個元素佔四個位元組,四個元素總共佔16個位元組。
printf("%d\n",sizeof(a+0));//4
//陣列名非單獨放到sizeof中使用時代表陣列首元素地址,因此sizeof(a+0)代表陣列a中首 元素地址所佔的記憶體,一個地址佔四個位元組。
printf("%d\n",sizeof(*a));//4
//同上,a代表首元素地址,而*a代表首元素,整型陣列一個元素佔四個位元組,所以sizeof(*a)佔四個位元組。
printf("%d\n",sizeof(a+1));//4
//a在sizeof中非單獨使用,代表首元素地址,a+1代表第二個元素的地址,所以也佔四個位元組。
printf("%d\n",sizeof(a[1]));//4
//a[1]代表陣列中第二個元素,整型陣列每個元素佔四個位元組。
printf("%d\n",sizeof(&a));//4
//a單獨出現在&後邊時代表整個陣列,&a就代表著整個陣列的地址,因為是地址,所以佔四個位元組。
printf("%d\n",sizeof(*&a));//16
//上述,a單獨出現在&後面時,代表整個陣列,&a表示整個陣列的地址,加上*代表整個陣列,即*&a代表整個陣列所有的元素,佔16位元組。
printf("%d\n",sizeof(&a+1));//4
//&a代表整個陣列的地址,之後加1,程式設計整個陣列後面的地址,因為是地址,佔四個位元組。
printf("%d\n",sizeof(&a[0]));//4
//a[0]陣列中第一個元素,取地址佔四個位元組。
printf("%d\n",sizeof(&a[0]+1));//4
//a[0]+1陣列中第二個元素,取地址,佔四個位元組。