size_t和unsigned int之间的区别?
我对size_t
很困惑。 我在网上search过,到处都提到size_t
是一个无符号types,所以它可以代表非负值。
我的第一个问题是,如果它是用来表示非负值,为什么我们不使用unsigned int
而不是size_t
?
我的第二个问题是: size_t
和unsigned int
可以互换? 如果不是那么为什么?
任何人都可以给我一个size_t
的简单例子吗?
如果它是用来表示非负值,那么为什么我们不使用
unsigned int
而不是size_t
因为unsigned int
不是唯一的无符号整型。 size_t
可以是任何unsigned char
, unsigned short
, unsigned int
, unsigned long
或unsigned long long
,具体取决于实现。
第二个问题是size_t和unsinged int是否可以互换,如果不是,那么为什么?
由于上面解释的原因,它们是不可互换的。
任何人都可以给我一个size_t的简单例子吗?
我不完全明白你的意思是“短暂的工作”。 它像其他任何无符号types一样工作(特别是像typedeffed的types)。 当您描述对象的大小时,鼓励您使用size_t
。 特别是, sizeof
运算符和各种标准库函数(如strlen()
返回size_t
。
奖金: 这里有一篇关于size_t
(以及与之密切相关的ptrdiff_t
types) 的好文章 (文章被删除,使用wayback机器快照 )。 这很好地解释了为什么你应该使用它。
在C中有5个标准的无符号整数types:
-
unsigned char
-
unsigned short
-
unsigned int
-
unsigned long
-
unsigned long long
对它们的大小和范围有各种要求(简而言之,每种types的范围是下一types范围的子集,但其中一些范围可能具有相同的范围)。
size_t
是一个typedef
(即别名)的一些无符号types,(可能是上面的一个,但可能是一个扩展的无符号整数types ,虽然这不太可能)。 这是sizeof
运算符产生的sizeof
。
在一个系统上,使用unsigned int
来表示大小是有意义的。 另一方面,使用unsigned long
或unsigned long long
可能更有意义。 ( size_t
不可能是unsigned char
或unsigned short
,但这是允许的)。
size_t
的目的是为了减轻程序员不必担心用哪个预定义types来表示大小。
假设sizeof
产生一个unsigned int
将不可移植。 假定产生size_t
代码更可能是便携式的。
size_t
有一个特定的限制。
从http://www.cplusplus.com/reference/cstring/size_t/引用:;
基本无符号整数types之一的别名。
它是一种能够以字节表示任何对象大小的types:size_t是sizeof运算符返回的types,广泛用于标准库中以表示大小和计数。
它与unsigned int
不可互换,因为unsigned int
的大小由数据模型指定。 例如,LLP64使用32位int
,ILP64使用64位int
。
size_t用于存储数据对象的大小,并保证能够保存特定C实现可以创build的任何数据对象的大小。 这个数据types可能会更小(位数),更大或者完全相同于unsigned int。
size_ttypes是C / C ++语言的基本无符号整数types。 这是sizeof运算符返回的结果的types。 types的大小被select,以便它可以存储理论上可能的任何types的数组的最大尺寸。 在32位系统上,size_t将占用32位,64位为64位。 换句话说,size_ttypes的variables可以安全地存储指针。 exception是指向类函数的指针,但这是一个特例。 尽pipesize_t可以存储一个指针,但最好使用另一个无符号整数typesuintptr_t(它的名字反映了它的能力)。 typessize_t和uintptr_t是同义词。 size_ttypes通常用于循环计数器,数组索引和地址算术。 size_ttypes的最大可能值是常量SIZE_MAX。
除了其他答案之外,它还logging了代码,并告诉人们你正在谈论内存中对象的大小