在標準c庫中的許多函式使用的引數或者返回值都是表示的用位元組表示的物件大小。
如:
// 按位元組拷貝,從s2拷貝n個位元組到s1位址
void
*memcpy
(void
*s1 ,
const
void
*s2 , size_t n)
第三個引數若採用unsigned int
, 在16-bit 長整形
和指標型別32-bits
的平台上就不夠用了(32bit位址,unsigned int表達不了如此大的數)。
此時,可更改為:unsigned long
,就可以處理了。但unsigned long
在移植到指標型別16-bits
的平台上後,**量變多,效率大打折扣。
使用size_t就可以避免該情況。
size_t
型別是乙個型別定義,通常將一些無符號的整形定義為size_t,比如說unsigned int或者unsigned long,甚至unsigned long long。每乙個標準c實現應該選擇足夠大的無符號整形來代表該平台上 最大可能出現的物件大小。
另外,ptrdiff_t
是pointer difference type
:指兩個指標之間的距離物件的大小型別。
reference
size t型別的含義
size t乙個基本的無符號整數的c c 型別,它的全稱是size type,就是一種用來記錄大小的資料型別,也是sizeof操作符返回的結果型別。size t是在基於無符號整數memsize型別的c c 的標準庫中定義的。c語言中,此型別位於標頭檔案stddef.h中,而在c 中,則位於cstdd...
size t型別總結
1 sizeof返回的必定是無符號整形,在標準c中通過 typedef 將返回值型別定義為size t.若用printf輸出size t型別時,c99中定義格式符 zd 若編譯器不支援可以嘗試 u或 lu.sizeof,獲取運算元占用的記憶體空間位元組數,返回型別size t strlen,獲取字元...
關於size t型別的整理
因為用的比較多,所以我決定整理一下size t的知識點。其實說白了就是一種資料型別,在標準c庫中定義的,應為unsigned int,在64位系統中為 long unsigned int。size t為什麼麻煩呢,因為它引起了我程式的問題,也是一種玄學的bug typename is not all...