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,“一种用来记录两个指针之间的距离的数据类型”。
通常,size_t和ptrdiff_t都是用typedef来实现的。你可能在某个头文件里面找到类似的语句:typedef unsigned int size_t;
而wchar_t则稍有不同。在一些旧的编译器中,wchar_t也可能是用typedef来实现,但是新的标准中wchar_t已经是C/C++语言的关键字,wchar_t类型的地位已经和char, int的地位等同了。
注:size_t在32位架构上是4字节,在64位架构上是8字节,在不同架构上进行编译时需要注意这个问题。而int在不同架构下都是4字节,与size_t不同;且int为带符号数,size_t为无符号数。
ssize_t:这个数据类型用来表示可以被执行读写操作的数据块的大小。
它和size_t类似,但必需是signed.意即:它表示的是signed size_t类型的
示例程序:
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类型的值