c語言中包含char、int、float、double等基本數據類型,本節主要研究一下這些基本數據類型的特點及存儲。
1、要用到的東西
a、sizeof函數,stdio.h中的函數,該函數接受一個變量,輸出該變量的大小,單位為byte;
b、存儲地址輸出,用到&操作符,“&變量名”表示該變量的地址。
2、直接開始
廢話不多說,直接上程序:
char a;
int b;
float c;
double d;
printf("a的地址為: %p [char] [%d Byte] \n",&a,(int)sizeof(a));
printf("b的地址為: %p [int] [%d Byte] \n",&b,(int)sizeof(b));
printf("c的地址為: %p [float] [%d Byte] \n",&c,(int)sizeof(c));
printf("d的地址為: %p [double] [%d Byte] \n",&d,(int)sizeof(d));
該程序段通過地址操作及sizeof函數,分別算出char、int、float、double類型變量的地址和大小,注意這4個變量是按順序創建的,我們看看輸出結果:
a的地址為: 0x7fff5fbff8db [char] [1 Byte]
b的地址為: 0x7fff5fbff8d4 [int] [4 Byte]
c的地址為: 0x7fff5fbff8d0 [float] [4 Byte]
d的地址為: 0x7fff5fbff8c8 [double] [8 Byte]
從輸出結果可以看出各數據類型分別占用的空間:
char類型:1字節;
int類型:4字節
float類型:4字節
double類型:8字節
從地址方面來分析:
按照a、b、c、d創建的順序可以發現,地址是按照從大到小的順序來存儲的,而如果重新打開程序的話,這些地址會發生變化,但是兩個地址之間的差值不變。進一步分析,可以發現,char類型的數據雖然只有1byte,但是卻占據4byte。
進一步驗證:
char aa;
char bb;
int ff;
printf("char %p \n",&aa);
printf("char %p \n",&bb);
printf("int %p \n",&ff);
我通過在int類型前面創建兩個char變量,結果又會如何呢?我們推測這兩個char數據也是占有4byte,看看是否正確:
char 0x7fff5fbff8c7
char 0x7fff5fbff8c6
int 0x7fff5fbff8c0
結果是正確的。
3、結論
a、char數據的建立以4byte為單位
b、int/float數據以4byte為單位
c、double數據以8byte為單位
4、注意點
a、本次測試的環境為macbook air 64位,在其他環境下可能略有不同;
b、以上得出的結論并不是完整的推論,只是做簡單的探討,如考慮short等類型數據,char可能占有的就是2字節。
c、sizeof還有其他一些用途、不在本節討論。