size_t总结

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

时间: 2024-10-18 04:22:22

size_t总结的相关文章

size_t, ptrdiff_t, size_type, difference_type

size_t是unsigned类型,用于指明数组长度或下标,它必须是一个正数,std::size_t ptrdiff_t是signed类型,用于存放同一数组中两个指针之间的差距,它可以负数,std::ptrdiff_t. size_type是unsigned类型,表示容器中元素长度或者下标,vector<int>::size_type i = 0; difference_type是signed类型,表示迭代器差距,vector<int>:: difference_type = it

c语言中的size_t

size_t unsigned int 类型,无符号,它的取值没有负数.用来表示 参数/数组元素个数,sizeof 返回值,或 str相关函数返回的 size 或 长度.sizeof 操作符的结果类型是size_t. ssize_t size of an object or –1,time_t time of day in seconds,long 类型,有符号 off_t 文件偏移,long 类型,有符号

【c++】size_t 和 size_type的区别

为了使自己的程序有很好的移植性,c++程序员应该尽量使用size_t和size_type而不是int, unsigned 1. size_t是全局定义的类型:size_type是STL类中定义的类型属性,用以保存任意string和vector类对象的长度 2. string::size_type 制类型一般就是unsigned int, 但是不同机器环境长度可能不同 win32 和win64上长度差别;size_type一般也是unsigned int3. 使用的时候可以参考:   string

size_type 和 size_t 的区别

标准库string里面有个函数size,用来返回字符串中的字符个数,具体用法如下:string st("The expense of spirit\n");cout << "The size of "<<st<<"is"<<st.size() << "characters, including the newline"<<endl;那么size()这个函数

size_T

在C++中,设计 size_t 就是为了适应多个平台的 .size_t的引入增强了程序在不同平台上的可移植性. size_t在C语言中就有了. 它是一种“整型”类型,里面保存的是一个整数,就像int, long那样.这种整数用来记录一个大小(size).size_t的全称应该是size type,就是说“一种用来记录大小的数据类型”. 通常我们用sizeof(XXX)操作,这个操作所得到的结果就是size_t类型. 因为size_t类型的数据其实是保存了一个整数,所以它也可以做加减乘除,也可以转

void *memmove( void* dest, const void* src, size_t count );数据拷贝,不需要CPU帮助

分享到 腾讯微博 QQ空间 新浪微博 人人网 朋友网 memmove 编辑词条 编辑词条 --> memmove用于从src拷贝count个字符到dest,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中.但复制后src内容会被更改.但是当目标区域与源区域没有重叠则和memcpy函数功能相同. 快速导航 目录 1函数简介 2程序示例 大事记 光影集锦 图册集锦 花絮视频 1函数简介 原型:void *memmove( void* dest,

size_t和size_type类型

size_t一般用来表示一种计数,比如有多少东西被拷贝等.例如:sizeof操作符的结果类型是size_t,该类型保证能容纳实现所建立的最大对象的字节大小. 它的意义大致是“适于计量内存中可容纳的数据项目个数的无符号整数类型”.所以,它在数组下标和内存管理函数之类的地方广泛使用. size_t是全局定义的类型:size_type是STL类中定义的类型属性,用以保存任意string和vector类对象的长度 string::size_type 制类型一般就是unsigned int, 但是不同机器

可变参数中size_t遇见的问题

在修改php扩展Trie时,出现了一个小bug PHP_FUNCTION(trie_filter_load) { Trie *trie; char *path; int path_len; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &path, &path_len) == FAILURE) { RETURN_NULL(); } if(path !=NULL){ php_printf("p

ptrdiff_t 和 size_t

size_t和ptrdiff_t常常用来指示数组长度. size_t常用于表示数组的大小,可以一般的将他看为 typedef unsigned int size_t,实质是一个无符号整形.包含在头文件“stddef.h”中. ptrdiff_t常用来保存两个指针减法的结果,常常被定义为long int类型.