C 中的sizeof操作符

2021-05-23 18:50:34 字數 2388 閱讀 9864

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,尚未發現有編譯器為其它值

int

unsigned 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; i

cout<<"arr["<<<"] : "<

<

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<<"length of '"<

<<"' = "<

<

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<<」sizeof(arr) = 「<

<

所以,在引數為陣列時,一般都會有另外乙個引數,傳遞陣列中包含元素的個數,否則函式體內不知道傳遞的實參包含元素的個數。有時也可以通過特殊元素作為結束符,例如對於字串陣列,可以將第乙個字元為』/0』的空字串表示整個陣列的結束。

C 中的sizeof操作符

1.1.sizeof操作符 sizeof操作符用於獲得乙個表示式的型別的大小,表示式可以是乙個表示式 變數或型別,當sizeof後面是單個識別符號時,不需要括號。如果sizeof表示式作為整個表示式的一部分時最好使用括號,除非你很清楚各運算子的優選級。sizeof的優先順序是一元運算子中最低的,但高...

C 中的sizeof操作符

technorati 標籤 sizeof 1.1.sizeof操作符 sizeof操作符用於獲得乙個表示式的型別的大小,表示式可以是乙個表示式 變數或型別,當sizeof後面是單個識別符號時,不需要括號。如果sizeof表示式作為整個表示式的一部分時最好使用括號,除非你很清楚各運算子的優選級。siz...

詳解sizeof操作符

一 sizeof是c語言的一種單目操作符,如c語言的其他操作符 等。它並不是函式。sizeof操作符以位元組形式給出了其運算元的儲存大小。運算元可以是乙個表示式或括在括號內的型別名。運算元的儲存大小由運算元的型別決定。二 sizeof的使用方法 1 用於資料型別 sizeof使用形式 sizeof ...