三、基本數(shù)據(jù)類型的sizeof
(1)C++內(nèi)置數(shù)據(jù)類型
32位C++中的基本數(shù)據(jù)類型,
bool char short int(short) int long int(long) float double long double
sizeof 1 1 2 4 4 4 8 10
char,short int(short),int,long int(long),float,double, long double大小分別是:1,2,4,4,4,8, 10.
考慮下面的代碼
1. cout《sizeof(unsigned int) == sizeof(int)《endl; // 相等,輸出 1 unsigned影響的只是最高位bit的意義,數(shù)據(jù)長度不會被改變的。
結(jié)論:unsigned不能影響sizeof的取值。
(2)自定義數(shù)據(jù)類型
typedef可以用來定義C++自定義類型?紤]下面的問題
1. typedef short WORD;
2. typedef long DWORD;
3. cout《(sizeof(short) == sizeof(WORD))《endl; // 相等,輸出1 4 cout《(sizeof(long) == sizeof(DWORD))《endl; // 相等,輸出1結(jié)論:自定義類型的sizeof取值等同于它的類型原形。
(3)函數(shù)類型
考慮下面的問題
1. int f1(){return 0;};
2. double f2(){return 0.0;}
3. void f3(){}
4.
5. cout《sizeof(f1())《endl; // f1()返回值為int,因此被認(rèn)為是int 6 cout《sizeof(f2())《endl; // f2()返回值為double,因此被認(rèn)為是double 7 cout《sizeof(f3())《endl; // 錯誤!無法對void類型使用sizeof 8 cout《sizeof(f1)《endl; // 錯誤!無法對函數(shù)指針使用sizeof 9 cout《sizeof*f2《endl; // *f2,和f2()等價,因為可以看作object,所以括號不是必要的。被認(rèn)為是double10
結(jié)論:對函數(shù)使用sizeof,在編譯階段會被函數(shù)返回值的類型取代
(4)、指針問題
考慮下面問題
cout《sizeof(string*)《endl; // 4
cout《sizeof(int*)《endl; // 4
cout《sizof(char****)《endl; // 4
可以看到,不管是什么類型的指針,大小都是4的,因為指針就是32位的物理地址。
結(jié)論:只要是指針,大小就是4.(64位機上要變成8也不一定)。
C++中的指針表示實際內(nèi)存的地址。和C不一樣的是,C++中取消了模式之分,也就是不再有small,middle,big,取而代之的是統(tǒng)一的flat.flat模式采用32位實地址尋址,而不再是c中的 segment:offset模式。舉個例子,假如有一個指向地址 f000:8888的指針,如果是C類型則是8888(16位, 只存儲位移,省略段),far類型的C指針是f0008888(32位,高位保留段地址,地位保留位移),C++類型的指針是f8888(32位,相當(dāng)于段地址*16 + 位移,但尋址范圍要更大)。
(5)、數(shù)組問題
考慮下面問題
1 char a[] = "abcdef";
2 char b[] = {'a', 'b', 'c', 'd', 'e', 'f'};
3 int c[20] = {3, 4};
4 char d = {"aa", "bb"};
5
6
7 cout《sizeof(a)《endl; // 7, 表示字符串8 cout《sizeof(b)《endl; // 6, 僅表示字符數(shù)組
9 cout《sizeof(c)《endl; // 80
10 cout《sizeof(d)《endl; // 6
11
1 cout 《 sizeof(*a) 《 endl;//1
2 cout 《 sizeof(*b) 《 endl;//1
3 cout 《 sizeof(*c) 《 endl;//4
4 cout 《 sizeof(*d) 《 endl;//3
特別如果字符數(shù)組表示字符串的話,數(shù)組末自動插入的'"0',在sizeof時不能遺漏
數(shù)組a的大小在定義時未指定,編譯時給它分配的空間是按照初始化的值確定的,也就是7.c是多維數(shù)組,占用的空間大小是各維數(shù)的乘積,也就是6.可以看出,數(shù)組的大小就是他在編譯時被分配的空間,也就是各維數(shù)的乘積*數(shù)組元素的大小。
結(jié)論:數(shù)組的大小是各維數(shù)的乘積*數(shù)組元素的大小。
相關(guān)推薦:
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |