size_t類型


size_t和ssize_t是ANSI C提供的標准頭文件里定義的一個“數據類型”,其實並不是新的數據類型,不是關鍵字,是通過typedef從已有數據類型定義而來。
ANSI C總共提供了24個頭文件,他們所處的目錄因編譯器而異,作者用的編譯器是gcc4.3.2,大部分頭文件在/usr/include目錄下,但是定義size_t和ssize_t的頭文件stddef.h則位於/usr/lib/gcc/i486-linux-gnu/4.3.2/include目錄下,是這樣定義的:
#define __SIZE_TYPE  long unsigned int
........................
typedef __SIZE_TYPE__  size_t;
.........................
即size_t實際上是無符號長整型,在32位系統上位32位,在64位系統中位64位。

 

size_t在C語言中就有了。

它是一種“整型”類型,里面保存的是一個整數,就像int, long那樣。這種整數用來記錄一個大小(size)。size_t的全稱應該是size type,就是說“一種用來記錄大小的數據類型”。
通常我們用sizeof(XXX)操作,這個操作所得到的結果就是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[] = {1, 2, 3, 4, 5}; // 定義一個數組
int* p1 = &arr[0];           // 取得數組中元素的地址,賦值給指針
int* p2 = &arr[3];
ptrdiff_t diff = p2 - p1;    // 指針的減法可以計算兩個指針之間相隔的元素個數
                             // 所得結果是一個ptrdiff_t類型
i = (int)diff;               // ptrdiff_t類型的值可以轉化為int類型的值


通常,size_t和ptrdiff_t都是用typedef來實現的。你可能在某個頭文件里面找到類似的語句:
typedef unsigned int size_t;
typedef int ptrdiff_t;
而wchar_t則稍有不同。在一些舊的編譯器中,wchar_t也可能是用typedef來實現,但是新的標准中wchar_t已經是C/C++語言的關鍵字,wchar_t類型的地位已經和char, int的地位等同了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM