c語言中包含char、int几颜、float、double等基本數(shù)據(jù)類型讯屈,本節(jié)主要研究一下這些基本數(shù)據(jù)類型的特點及存儲蛋哭。
1、要用到的東西
a涮母、sizeof函數(shù)谆趾,stdio.h中的函數(shù)躁愿,該函數(shù)接受一個變量,輸出該變量的大小沪蓬,單位為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函數(shù),分別算出char园欣、int帖世、float、double類型變量的地址和大小沸枯,注意這4個變量是按順序創(chuàng)建的日矫,我們看看輸出結(jié)果:
a的地址為: 0x7fff5fbff8db [char] [1 Byte]
b的地址為: 0x7fff5fbff8d4 [int] [4 Byte]
c的地址為: 0x7fff5fbff8d0 [float] [4 Byte]
d的地址為: 0x7fff5fbff8c8 [double] [8 Byte]
從輸出結(jié)果可以看出各數(shù)據(jù)類型分別占用的空間:
char類型:1字節(jié);
int類型:4字節(jié)
float類型:4字節(jié)
double類型:8字節(jié)
從地址方面來分析:
按照a绑榴、b哪轿、c、d創(chuàng)建的順序可以發(fā)現(xiàn)彭沼,地址是按照從大到小的順序來存儲的缔逛,而如果重新打開程序的話,這些地址會發(fā)生變化姓惑,但是兩個地址之間的差值不變褐奴。進一步分析,可以發(fā)現(xiàn)于毙,char類型的數(shù)據(jù)雖然只有1byte敦冬,但是卻占據(jù)4byte。
進一步驗證:
char aa;
char bb;
int ff;
printf("char %p \n",&aa);
printf("char %p \n",&bb);
printf("int %p \n",&ff);
我通過在int類型前面創(chuàng)建兩個char變量唯沮,結(jié)果又會如何呢脖旱?我們推測這兩個char數(shù)據(jù)也是占有4byte,看看是否正確:
char 0x7fff5fbff8c7
char 0x7fff5fbff8c6
int 0x7fff5fbff8c0
結(jié)果是正確的介蛉。
3萌庆、結(jié)論
a、char數(shù)據(jù)的建立以4byte為單位
b币旧、int/float數(shù)據(jù)以4byte為單位
c践险、double數(shù)據(jù)以8byte為單位
4、注意點
a、本次測試的環(huán)境為macbook air 64位巍虫,在其他環(huán)境下可能略有不同彭则;
b、以上得出的結(jié)論并不是完整的推論占遥,只是做簡單的探討俯抖,如考慮short等類型數(shù)據(jù),char可能占有的就是2字節(jié)瓦胎。
c芬萍、sizeof還有其他一些用途、不在本節(jié)討論凛捏。