c++ sizeof使用
[url]http://dev.yesky.com/143/2563643.shtml[/url]
什麼是sizeof
首先看一下sizeof在msdn上的定義:
The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (including aggregate types). This keyword returns a value of type size_t.
看到return這個字眼,是不是想到了函式?錯了,sizeof不是一個函式,你見過給一個函式傳引數,而不加括號的嗎?sizeof可以,所以sizeof不是函式。網上有人說sizeof是一元操作符,但是我並不這麼認為,因為sizeof更像一個特殊的巨集,它是在編譯階段求值的。舉個例子:
cout<<sizeof(int)<<endl; // 32位機上int長度為4
cout<<sizeof(1==2)<<endl; // == 操作符返回bool型別,相當於 cout<<sizeof(bool)<<endl;
在編譯階段已經被翻譯為:
cout<<4<<endl;
cout<<1<<endl;
這裡有個陷阱,看下面的程式:
int a = 0;
cout<<sizeof(a=3)<<endl;
cout<<a<<endl;
輸出為什麼是4,0而不是期望中的4,3???就在於sizeof在編譯階段處理的特性。由於sizeof不能被編譯成機器碼,所以sizeof作用範圍內,也就是()裡面的內容也不能被編譯,而是被替換成型別。=操作符返回左運算元的型別,所以a=3相當於int,而程式碼也被替換為:
int a = 0;
cout<<4<<endl;
cout<<a<<endl;
所以,sizeof是不可能支援鏈式表示式的,這也是和一元操作符不一樣的地方。
結論:不要把sizeof當成函式,也不要看作一元操作符,把他當成一個特殊的編譯預處理。
1. sizeof 操作符的結果型別size_t,它在標頭檔案中typedef為unsigned int型別: typedef unsigned int size_t.
2. sizeof是是長度運算子, 獲得資料型別或是變數的長度,如果是資料型別,則返回資料型別大小,如果是用陣列,則返回陣列所佔空間大小,strlen是計算字串長度的函式,返回的是實際串長度,以char* 作引數 ,且必須是以'\0'結尾。
3. sizeof在編譯的時候就把計算過,strlen的結果要在執行的時候才能計算出來。
4. 陣列做長度運算子sizeof的引數不退化。陣列做函式strlen的引數就退化為指標了,因為陣列作為引數傳給函式時傳的是指標而不是陣列,傳遞的是陣列的首地址。
char* ss = "0123456789";
cout<<sizeof(ss)<<endl;//4
cout<<sizeof(*ss)<<endl;//1
cout<<strlen(ss)<<endl;//10
char ss1[] = "0123456789";
cout<<sizeof(ss1)<<endl;//11
cout<<sizeof(*ss1)<<endl;//1
cout<<strlen(ss1)<<endl;//10
char ss2[100] = "0123456789";
cout<<sizeof(ss2)<<endl;//100
char ss3[] = "0123456789\n";
cout<<sizeof(ss3)<<endl;//12
int n[4] = {1,2,3,4};
cout<<sizeof(n)<<endl;//16
int n1= 1234;
cout<<sizeof(n1)<<endl;//4
相關文章
- JAVA使用SizeOfJava
- 理解sizeof
- 關於sizeof,對空指標sizeof(*p)可以嗎?指標
- 以下為Windows NT 下的32 位C++程式,請計算sizeof 的值WindowsC++
- sizeof()的結果值
- C++結構體內幕揭秘:sizeof之謎與記憶體佈局探秘C++結構體記憶體
- c語言中sizeof詳解C語言
- 解析C語言中的sizeofC語言
- sizeof與strlen的區別
- C# sizeof 計算規則C#
- C語言sizeof()變數、字元、字串C語言變數字元字串
- 使用 C++ WinRT 元件C++元件
- C++ instance的使用C++
- linux c++ pprof的使用LinuxC++
- C++ 抽象類快速使用C++抽象
- C++ 容器vector的使用C++
- 【C/C++】c++多程式與hiredis的淺使用C++Redis
- sizeof 和 strlen 計算陣列大小和長度詳解陣列
- C++primer1-7章知識點總結——sizeof運算子C++
- 求陣列長度的兩種方法,以及區別(strlen sizeof)陣列
- [C++]括號使用小技巧C++
- 使用C++的ORM框架QxORMC++ORM框架
- C++純虛數的使用C++
- c++使用遇到的問題C++
- Linux下C++ libtorrent庫使用LinuxC++
- C++之父談C++ :一天之內你就能學會出色使用C++C++
- c++ 11 執行緒池---完全使用c++ 11新特性C++執行緒
- 65.C指標---sizeof()函式和strlen()函式常見考指標函式
- sizeof和strlen計算陣列型別和指標型別字串陣列型別指標字串
- protobuf 的交叉編譯使用(C++)編譯C++
- json的使用(python寫,c++讀)JSONPythonC++
- Cpp(九) gRPC protobuf for C++ 基本使用RPCC++
- C++,std::shared_future的使用C++
- Windows上Python使用swig呼叫C++WindowsPythonC++
- C++使用Boost多執行緒C++執行緒
- Visual Studio C++ 安裝以及使用教程C++
- C++ 使用 new 建立二維陣列C++陣列
- 使用 Visual C++ 的 Office 自動化C++
- C++中簡單使用HP-SocketC++