technorati 標籤:
sizeof
1.1. sizeof操作符
sizeof操作符用於獲得乙個表示式的型別的大小,表示式可以是乙個表示式、變數或型別,當sizeof後面是單個識別符號時,不需要括號。如果sizeof表示式作為整個表示式的一部分時最好使用括號,除非你很清楚各運算子的優選級。sizeof的優先順序是一元運算子中最低的,但高於所有二元運算子。使用sizeof獲得c++內建型別的值可能為(不同cpu、不同編譯器都可能不同):
資料型別
sizeof
備註bool
一般都是1,尚未發現不為1的編譯器
char
unsigned char
signed char
c++標準定義
short [int]
unsigned short [int]
shigned short [int]
c++標準規定至少為不比char小,絕大多數編譯器都是2,尚未發現有編譯器為其它值
intunsigned int
signed int
1,2,4,8
不同cpu不同,8位微控制器可能為1(可能會有編譯器選項設為4);16位微控制器為2(可能有編譯器選項改為4);32位cpu一般為4,64位cpu多數編譯器也預設為4,可能有編譯選項設為8
long [int]
unsigned long [int]
signed long [int]
4, 8
c++標準規定至少為4,但絕大多數編譯器也都是4,但有些編譯器提供了編譯選項,可以設為8
long long [int]
unsigned long long [int]
4, 8
一般為8,但在一些嵌入式裝置的編譯器中可能只支援到4個位元組的精度
float
絕大多數編譯器都實現為4個位元組的精度
double
4,8絕大多數編譯器都實現為8個位元組的精度,但有些嵌入式編譯器可能只支援4個位元組
long double
4, 8, 12
一般為12,但有些編譯器特別是嵌入式編譯器可能只支援8位元組精度,甚至只支援4位元組精度
void*, char*, short*, int* , boo*, long*, long long*, float*, double*, long double*
2,4,8
在8、16位微控制器上為2,在32位機上為4,在64位機上為64
enum
4,8一般為4,但有的編譯器可以支援enum的值定義為long long型擴充套件到8位元組(如vc++ 2010、gcc 4.3.4),有的編譯器嚴格檢查定義的值,超過4位元組時則給出編譯錯誤(如c++builder 2010),c++標準並沒有規定具體大小。
1.1.1. 提高程式的易維護性
合更地使用sizeof可以更好的提高軟體的易維護性,例如下面的**,當我們新增或刪除陣列中的元素時for迴圈裡的迴圈條件無需修改。
char* arr = ;
for(int i=0; icout
1.1.2. 代替strlen檢測字串常量的長度
如果您在編譯期就可以確定字串常量的長度,請使用sizeof,不要使用strlen,如**1-?所示。但這裡只能用於求字串常量的值,sizeof( )的表示式不能是char*型別,否則就成了指標的大小了,而不是指向的字串。
// **1-7
#include
#define static_strlen(str) (sizeof(str)-1)
int main( void )
#define hello "hello"
std::size_t len = static_strlen("hello") ;
std::cout
return 0;
1.1.3. 陣列
當sizeof操作符作用於陣列上時,返回的時陣列元素的個數乘以元素的大小,例如
char carr[5]; // sizeof(carr) = 5
short* sarr[10]; // sizeof(sarr) = 20
但是,當陣列作為函式的引數時,其實是按指標傳遞的,在函式內使用sizeof作用於引數時,得到的是指標的值,如:
void func( char arr[20], int len)
cout
所以,在引數為陣列時,一般都會有另外乙個引數,傳遞陣列中包含元素的個數,否則函式體內不知道傳遞的實參包含元素的個數。有時也可以通過特殊元素作為結束符,例如對於字串陣列,可以將第乙個字元為』/0』的空字串表示整個陣列的結束。
C 中的sizeof操作符
1.1.sizeof操作符 sizeof操作符用於獲得乙個表示式的型別的大小,表示式可以是乙個表示式 變數或型別,當sizeof後面是單個識別符號時,不需要括號。如果sizeof表示式作為整個表示式的一部分時最好使用括號,除非你很清楚各運算子的優選級。sizeof的優先順序是一元運算子中最低的,但高...
C 中的sizeof操作符
1.1.sizeof操作符 sizeof操作符用於獲得乙個表示式的型別的大小,表示式可以是乙個表示式 變數或型別,當sizeof後面是單個識別符號時,不需要括號。如果sizeof表示式作為整個表示式的一部分時最好使用括號,除非你很清楚各運算子的優選級。sizeof的優先順序是一元運算子中最低的,但高...
詳解sizeof操作符
一 sizeof是c語言的一種單目操作符,如c語言的其他操作符 等。它並不是函式。sizeof操作符以位元組形式給出了其運算元的儲存大小。運算元可以是乙個表示式或括在括號內的型別名。運算元的儲存大小由運算元的型別決定。二 sizeof的使用方法 1 用於資料型別 sizeof使用形式 sizeof ...