size_t类型总结

转载 2016年08月30日 09:40:35

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(XXX)操作,这个操作所得到的结果就是size_t类型。因为size_t类型的数据其实是保存了一个整数,所以它也可以做加减乘除,也可以转化为int并赋值给int类型的变量。

类似的还有wchar_t、 ptrdiff_t。 
wchar_t就是wide char type,“一种用来记录一个宽字符的数据类型”。 
ptrdiff_t就是pointer difference type,“一种用来记录两个指针之间的距离的数据类型”。 
代码举例:

<code class="hljs objectivec has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> i;                   <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 定义一个int类型的变量i</span>
size_t size = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">sizeof</span>(i); 
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 用sizeof操作得到变量i的大小,这是一个size_t类型的值</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 可以用来对一个size_t类型的变量做初始化</span>
i = (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span>)size;           <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// size_t类型的值可以转化为int类型的值</span>

<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">char</span> c = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'a'</span>;       <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// c保存了字符a,占一个字节</span>
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">wchar_t</span> wc = L<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'a'</span>;  
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// wc保存了宽字符a,占两个字节。注意'a'表示字符a,L'a'表示宽字符a</span>

<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> arr[] = {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">4</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">5</span>}; <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 定义一个数组</span>
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span>* p1 = &arr[<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>];           <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 取得数组中元素的地址,赋值给指针</span>
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span>* p2 = &arr[<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3</span>];
ptrdiff_t diff = p2 - p1; 
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//指针的减法可以计算两个指针之间相隔的元素个数,所得结果是一个ptrdiff_t类型</span>
i = (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span>)diff;          <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// ptrdiff_t类型的值可以转化为int类型的值</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li></ul>

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可以写出扩展行更好的代码,即是为了提供一种可移植的代码形式。

size_t 类型总结

最近在阅读C代码过程中发现 大量使用size_t类型.以前看到该类型默认看做int. 一直没明白 他到底干嘛的.今天百度完后,在vs2005上找到了完整的定义: 很多解释的文章说size_t定义在...
  • w839687571
  • w839687571
  • 2013年12月20日 16:57
  • 2440

认识size_t和指针类型的大小

size_t类型占用的空间到底是多少,size_t究竟是什么类型,本文将详细说明道来。...
  • K346K346
  • K346K346
  • 2015年08月26日 10:41
  • 5299

size_t类型总结

1、sizeof返回的必定是无符号整形,在标准c中通过 typedef 将返回值类型定义为size_t.  若用printf输出size_t类型时,C99中定义格式符%zd;若编译器不支持可以尝试%...
  • u010984552
  • u010984552
  • 2016年08月30日 09:40
  • 935

关于size_t类型的整理

因为用的比较多,所以我决定整理一下size_t的知识点。 其实说白了就是一种数据类型,在标准C库中定义的,应为unsigned int,在64位系统中为 long unsigned int。 si...
  • GabrielGu
  • GabrielGu
  • 2016年10月26日 09:40
  • 1811

size_t类型总结

1、sizeof返回的必定是无符号整形,在标准c中通过 typedef 将返回值类型定义为size_t. 若用printf输出size_t类型时,C99中定义格式符%zd;若编译器不支持可以尝试%...
  • JIEJINQUANIL
  • JIEJINQUANIL
  • 2016年03月25日 16:52
  • 8897

size_t 与 ssize_t 类型

ssize_t是什么类型的?解释一:为了增强程序的可移植性,便有了size_t,它是为了方便系统之间的移植而定义的,不同的系统上,定义size_t可能不一样。     在32位系统上 定义为 unsi...
  • gowyz
  • gowyz
  • 2011年07月14日 16:20
  • 20900

size_t,ssize_t,int和long的区别

size_t是一些C/C++标准在stddef.h中定义的。这个类型足以用来表示对象的大小。 size_t的真实类型与操作系统有关,在32位架构中被普遍定义为: 1 typede...
  • bzhxuexi
  • bzhxuexi
  • 2014年02月25日 09:56
  • 10899

linux中的size_t和ssize_t

size_t 反映内存中对象的大小(以字节为单位),ssize_t 供返回字节计数或错误提示的函数使用。 size_t 的定义在: /usr/include/linux/types.h ...
  • avrmcu1
  • avrmcu1
  • 2013年11月10日 23:29
  • 4302

size_t的定义

size_t和ssize_t是ANSI C提供的标准头文件里定义的一个“数据类型”,其实并不是新的数据类型,不是关键字,是通过typedef从已有数据类型定义而来。 ANSI C总共提供了24个头文...
  • a1232345
  • a1232345
  • 2015年06月16日 11:36
  • 1417

size_t(-1)

今天遇到标准答案中的max_size中的最大可以allocate的数量  size_type max_size() const {             return std::size_t...
  • lck32578
  • lck32578
  • 2015年05月28日 18:50
  • 252
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:size_t类型总结
举报原因:
原因补充:

(最多只允许输入30个字)