由於不同位數的操作系統計算結果可能不同,下面是在32位的win7 下計算的。
1 對於直接的調用sizeof,如果是數組首地址,sizeof會輸出數組所佔地址空間的大小(字節爲單位)。如果是一個指針的話,則輸出在該系統中地址的字節寬度,即(位寬/8)。
#include <stdio.h>
int main()
{
char a[25];
char *b;
printf("%d\n", sizeof(a));
printf("%d\n", sizeof(b));
return 0;
}
輸出:
25
4
2 如果數組是作爲函數的形參傳遞進來,那麼函數會把這個數組首地址當做指針。
即: C語言中,數組名作爲參數傳遞給函數時,退化爲指針; 當函數需要數組大小時,至少需要傳遞兩個參數:一個參數傳數組名,另一個傳數組大小。
#include <stdio.h>
void test_sizeof_addr(char *addr)
{
printf("%d\n", sizeof(addr));
}
void test_sizeof_array(char array[])
{
printf("%d\n", sizeof(array));
}
void test_sizeof_array_right(char array[],int size)
{
printf("%d , %d\n", sizeof(array),size);
}
int main()
{
char a[25];
test_sizeof_addr(a);
test_sizeof_array(a);
test_sizeof_array_right(a,sizeof(a));
printf("%d\n", sizeof(a));
printf("%d, %d\n", sizeof(int),sizeof(long));
return 0;
}
輸出:
4
4
4 , 25
25
4, 4