最近筆試經常遇到C語言各類型變量所占字節數的問題,這裡做一個總結好了。
常見的有char、int、long、short、float、double及指針等.
這裡單只char,char變量在內存中存儲的是字符對應的ASCII碼值。所以長度也是固定的,為1個字節。
查了資料發現對各個類型的整數占用字節數是有一個規定的,雖然16位32位或者64位的機子各種類型所占用的長度並不一樣。規則如下:
- short 至少占用2個字節。
- int 建議為一個機器字長。32位環境下機器字長為4字節,64位環境下機器字長為8字節。
- short 的長度不能大於 int,long 的長度不能小於 int。
所以說,short並不一定短,long並不一定短,有可能都和int一樣長。
C中浮點數有兩種,float和double,不像整數,小數的長度始終是固定的,float占用4個字節,double占用8個字節。
C中指針即為地址,所以編輯器的尋址空間則是指針的地址范圍。所以指針變量在32位機器的尋址空間為2^32,要將所有地址都表示出來則需要為4個字節長度,所以要占用4個字節長度。同理64位的編譯器則需要8個字節長度。
可以使用sizeof()
來查看所占用的長度,如下:
#include <iostream>
#include <vector>
using namespace std;
int main(int argc, const char * argv[]) {
// insert code here...
char *p;
cout<<"char: "<<sizeof(char)<<endl;
cout<<"int: "<<sizeof(int)<<endl;
cout<<"short: "<<sizeof(short)<<endl;
cout<<"long: "<<sizeof(long)<<endl;
cout<<"*: "<<sizeof(p)<<endl;
cout<<"float: "<<sizeof(float)<<endl;
cout<<"double: "<<sizeof(double)<<endl;
return 0;
}
輸出結果如下:
char: 1
int: 4
short: 2
long: 8
*: 8
float: 4
double: 8