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,“一种用来记录两个指针之间的距离的数据类型”。 
代码举例:

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类型的值

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

转自:http://blog.csdn.net/JIEJINQUANIL/article/details/50981834

size_t总结的更多相关文章

  1. size_t和size_type

    size_t和size_type是为了独立于及其而定义的类型,因为比如在一台电脑上int为2b,而另一台电脑上是4b,这样就给程序的可移植性带来了麻烦.为了解决这个问题,在库内定义了如上类型,其实si ...

  2. size_t 类型

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

  3. size_t 和 size_type的区别

    为了使自己的程序有很好的移植性,c++程序员应该尽量使用size_t和size_type而不是int, unsigned 1. size_t是全局定义的类型:size_type是STL类中定义的类型属 ...

  4. v.size() return size_t not int 返回无符号整型数

    In the C++ STL, the vector size() function return size_t, which is unsigned int, not int. So imagine ...

  5. size_t 与 int 区别

    size_t是无符号的,并且是平台无关的,表示0-MAXINT的范围, 但是如果传入的是负数,会被编译成他的补码. size_t是标准规定的一个同义词,它的原始定义放在stddef.h里面,不同的环境 ...

  6. size_type、size_t、differentce_type以及ptrdiff_t

      目录(?)[-] size_type size_t different_type ptrdiff_t size_t是unsigned类型,用于指明数组长度或下标,它必须是一个正数,std::siz ...

  7. Unix编程之size_t、ssize_t

    http://blog.csdn.net/lalor/article/details/7426184 首先,我非常肯定以 及确定的告诉你ssize_t是有符号整型,在32位机器上等同与int,在64位 ...

  8. #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)

    #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)宏的运行机理:1. ( (TYPE *)0 ) 将零转型为TY ...

  9. size_t和ssize_t

    Ssize_t 与size_t 跟踪linux源码得到以下宏: #ifndef _SIZE_T #define _SIZE_T typedef __kernel_size_t         size ...

随机推荐

  1. 2016HUAS暑假集训训练2 O - Can you find it?

    题目链接:http://acm.hust.edu.cn/vjudge/contest/121192#problem/O 这道题是一道典型二分搜素题,题意是给定3个数组 每个数组的数有m个 再给定l个s ...

  2. centos MariaDB10.1.X galera cluster

    [mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.1.12/centos6-amd64 gpgkey=https://yum.m ...

  3. MUI - 侧滑菜单

    各大APP必备的侧滑菜单栏,支持手势滑动.包含QQ式.美团式等 结构模板 这里是示例Html, 必须使用Mui框架才能使用. 主容器 <div class="mui-off-canva ...

  4. 织梦DEDECMS网站后台安全检测提示 加一个开关

    1.进入后台后,点击 系统->系统基本参数->添加变量: 变量名称:cfg_safecheck_switch 变量值:N 变量类型:布尔(Y/N) 参数说明:启用安全监测系统: 2.找到系 ...

  5. php课程---JavaScript改变HTML中的元素

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. Mac OS X 懒人版安装教程(之前的图全部挂了,所以重发了)

    请版主把我之前发的那个帖子删了!因为所有的图全部挂了,所以麻烦版主了…… 安装中出现五国的话就请进入这里看看是那里的错误http://bbs.pcbeta.com/viewthread-863656- ...

  7. Linux搭建QT环境笔记

    *** [../../../../lib/libQtWebKit.so.4.7.4] Error 1make[1]: Leaving directory `/home/cloverbox/qt-eve ...

  8. jQuery 控制表单和表格

    这里总结了jQuery中对表格和表单的一些常用操作, 通过这里的实例和操作肯定对jQuery的掌握有一个新得提高, 希望大家耐心看完, 多实践. <!DOCTYPE html PUBLIC &q ...

  9. 【java基础学习】数据库编程

    数据库编程 import java.sql.*; public class JdbcDemo1{ public static void main(String[] args){ try{ //1.加载 ...

  10. Android如何通过shareduserid获取系统权限

    [原文] android会为每个apk进程分配一个单独的空间(比如只能访问/data/data/自己包名下面的文件),一般情况下apk之间是禁止相互访问数据的.通过Shared User id,拥有同 ...