1、sizeof返回的必定是無符號整形,在標準c中通過 typedef 將返回值型別定義為size_t.
若用printf輸出size_t型別時,c99中定義格式符%zd;若編譯器不支援可以嘗試%u或%lu.
sizeof,獲取運算元占用的記憶體空間位元組數,返回型別size_t;
strlen,獲取字元陣列實際使用的位元組數,不包含陣列結尾符』\0』,返回型別size_t。
2、它是一種「整型」型別,裡面儲存的是乙個整數,就像int, long那樣。這種整數用來記錄乙個大小(size)。size_t 的全稱應該是size type,就是說「一種用來記錄大小的資料型別」。通常我們用sizeof(***)操作,這個操作所得到的結果就是size_t型別。因為size_t型別的資料其實是儲存了乙個整數,所以它也可以做加減乘除,也可以轉化為int並賦值給int型別的變數。
類似的還有wchar_t、 ptrdiff_t。
wchar_t就是wide char type,「一種用來記錄乙個寬字元的資料型別」。
ptrdiff_t就是pointer difference type,「一種用來記錄兩個指標之間的距離的資料型別」。
**舉例:
int i; // 定義乙個int型別的變數i
size_t size = sizeof(i);
// 用sizeof操作得到變數i的大小,這是乙個size_t型別的值
// 可以用來對乙個size_t型別的變數做初始化
i = (int)size; // size_t型別的值可以轉化為int型別的值
char c = 'a'; // c儲存了字元a,佔乙個位元組
wchar_t wc = l'a';
// wc儲存了寬字元a,佔兩個位元組。注意'a'表示字元a,l'a'表示寬字元a
int arr = ; // 定義乙個陣列
int* p1 = &arr[0]; // 取得陣列中元素的位址,賦值給指標
int* p2 = &arr[3];
ptrdiff_t diff = p2 - p1;
//指標的減法可以計算兩個指標之間相隔的元素個數,所得結果是乙個ptrdiff_t型別
i = (int)diff; // ptrdiff_t型別的值可以轉化為int型別的值
3、size_t是全域性定義的型別;size_type是stl類中定義的型別屬性,用以儲存任意string和vector類物件的長度
4、string::size_type 制型別一般就是unsigned int, 但是不同機器環境長度可能不同 win32 和win64上長度差別;size_type一般也是unsigned int
5、使用的時候可以參考:
string::size_type a =123;
vectorsize_type b=234;
size_t b=456;
6、 size_t 使用的時候標頭檔案需要 ;size_type 使用的時候需要或者
7、舉例:
sizeof(string::size_type)
sizeof(vector::size_type)
sizeof(vector::size_type)
sizeof(size_t)
上述長度均相等,長度為win32:4,win64:8
8、二者聯絡:在用下標訪問元素時,vector使用vector::size_type作為下標型別,而陣列下標的正確型別則是size_t
9、在編譯的過程中size_t型別的a值會被編譯他的補碼。所以在使用size_t型別資料的過程中尤其要注意,特別是在邏輯表示式中使用到該型別,稍不注意可能帶來很嚴重的後果。
注:正數的補碼:與原碼相同;負數的補碼:符號位為1,其餘位為該數絕對值的原碼按位取反,然後整個數加1。
10、不同平台的size_t會用不同的型別實現,使用size_t而非int或unsigned可以寫出擴充套件行更好的**,即是為了提供一種可移植的**形式。
C語言 size t說明
size t是什麼型別的?為了增強程式的可移植性,便有了size t,它是為了方便系統之間的移植而定義的,不同的系統上,定義size t可能不一樣。在32位系統上 定義為 unsigned int 也就是說在32位系統上是32位無符號整形。在64位系統上定義為 unsigned long 也就是說在...
C語言中size t和size type 的區別
1 size tsize t是用於陣列的下標值型別,也可以用來 接收 sizeof操作符的返回值。既然是無符號的,一般只能用在沒有負數的地方了.比如我們的年齡啊,身高啊.在c標準函式中,最一般的就是strlen,返回字元數.字元數當然不可能是負的啊,所以函式原型是size t strlen cons...
基礎C語言知識串串香3 size t型別
c語言標準規定size t是一種無符號整數型別,編譯器可以根據作業系統的不同而用typedef來定義不同的size t型別,即在不同的作業系統上所定義的size t 可能不一樣。例如在32位作業系統上可以將size t定義為unsigned int型別,而在64位作業系統上則可以定義為unsigne...