Cpp代碼
1.// Example of the sizeof keyword
2.size_t i = sizeof( int );
3.
4.struct align_depends {
5. char c;
6. int i;
7.};
8.size_t size = sizeof(align_depends); // The value of size depends on
9. // the value set with /Zp or
10. // #pragma pack
11.
12.int array[] = { 1, 2, 3, 4, 5 }; // sizeof( array ) is 20
13. // sizeof( array[0] ) is 4
14.size_t sizearr = // Count of items in array
15. sizeof( array ) / sizeof( array[0] );
// Example of the sizeof keyword
size_t i = sizeof( int );
struct align_depends {
char c;
int i;
};
size_t size = sizeof(align_depends); // The value of size depends on
// the value set with /Zp or
// #pragma pack
int array[] = { 1, 2, 3, 4, 5 }; // sizeof( array ) is 20
// sizeof( array[0] ) is 4
size_t sizearr = // Count of items in array
sizeof( array ) / sizeof( array[0] );
1. 用法
1.1 sizeof和new、delete等一樣,是關鍵字,不是函數或者宏。
1.2 sizeof返回記憶體中分配的位元組數,它和作業系統的位元有關。例如在常見的32位系統中,int類型佔4個位元組;但是在16位系統中,int類型佔2個位元組。
1.3 sizeof的參數可以是類型,也可以是變數,還可以是常量。對於相同類型,以上3中形式參數的sizeof傳回值相同。
Cpp代碼
1.int a;
2.sizeof(a); // = 4
3.sizeof(int); // = 4
4.sizeof(1); // = 4
int a;
sizeof(a); // = 4
sizeof(int); // = 4
sizeof(1); // = 4
1.4 C99標準規定,函數、不能確定類型的運算式以及位域(bit-field)成員不能被計算s
izeof值,即下面這些寫法都是錯誤的。
Cpp代碼
1.void fn() { }
2.sizeof(fn); // error:函數
3.sizeof(fn()); // error:不能確定類型
4.struct S
5.{
6. int a : 3;
7.};
8.S sa;
9.sizeof( sa.a ); // error:位域成員
void fn() { }
sizeof(fn); // error:函數
sizeof(fn()); // error:不能確定類型
struct S
{
int a : 3;
};
S sa;
sizeof( sa.a ); // error:位域成員
1.5 sizeof在編譯階段處理。由於sizeof不能被編譯成機器碼,所以sizeof的參數不能被編譯,而是被替換成類型。
Cpp代碼
1.int a = -1;
2.sizeof(a=3); // = sizeof(a) = sizeof(int) = 4
3.cout
上一篇:C語言記憶體配置
下一篇:C語言堆棧入門——堆和棧的區別【頂嵌原創】