size_t 类型

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了size_t 类型相关的知识,希望对你有一定的参考价值。

1 关于size_t定义

  size_t是一种数据相关的无符号类型,它被设计得足够大以便能够内存中任意对象的大小。在cstddef头文件中定义了size_t类型,这个文件是C标准库stddef.h头文件的C++版本。

  在需要通过数组下标来访问数组时,通常建议将下标定义size_t类型,因为一般来说在进行下标访问时,下标都是正的。当然,也不是所有的下标访问操作下标都是正的,比如以下代码:

int a[10]={1,2,3,4,5,6,7,8,9,10};

int * ptr =&(a[4]);

cout<<ptr[-2]<<endl;

  这段代码中对ptr进行了下标访问,并且下标是负的,但是这个访问并不是错误的,执行的结果是输出3。

 

2 在Visual Studio2012中查看size_t 的定义

         在VS中,选中size_t,右键调出菜单,选择“转到定义”,会自动跳转到size_t的定义位置。在我的机子上,跳到了的文件目录:d:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\crtdefs.h。(这里为什么跳到了crtdef.h这个头文件而不是上面说的cstddef头文件?)

         来看看在windows下是如何定义这个size_t的:

#ifndef _SIZE_T_DEFINED

#ifdef  _WIN64

typedef unsigned __int64    size_t;

#else

typedef _W64 unsigned int   size_t;

#endif

#define _SIZE_T_DEFINED

#endif

  如上所示,size_t的定义是和系统相关的。

3 size_t作用

  显然,size_t的取值与机器相关,某些情况下正确的使用size_t可以提高程序的可移植性和有效性。

4 一篇关于size_t的博客:why size_t matters

 

以上是关于size_t 类型的主要内容,如果未能解决你的问题,请参考以下文章

size_t是什么数据类型?为什么要用size_t替代intunsigned intunsigned longunsigned long long

unsigned int 与 size_t

std::size_t 与 size_type 作为参数和函数返回类型

size_t类型

size_t总结

c size_t