size_t和unsigned int之间的区别?

我对size_t很困惑。 我在网上search过,到处都提到size_t是一个无符号types,所以它可以代表非负值。

我的第一个问题是,如果它是用来表示非负值,为什么我们不使用unsigned int而不是size_t

我的第二个问题是: size_tunsigned int可以互换? 如果不是那么为什么?

任何人都可以给我一个size_t的简单例子吗?

如果它是用来表示非负值,那么为什么我们不使用unsigned int而不是size_t

因为unsigned int不是唯一的无符号整型。 size_t可以是任何unsigned charunsigned shortunsigned intunsigned longunsigned long long ,具体取决于实现。

第二个问题是size_t和unsinged int是否可以互换,如果不是,那么为什么?

由于上面解释的原因,它们是不可互换的。

任何人都可以给我一个size_t的简单例子吗?

我不完全明白你的意思是“短暂的工作”。 它像其他任何无符号types一样工作(特别是像typedeffed的types)。 当您描述对象的大小时,鼓励您使用size_t 。 特别是, sizeof运算符和各种标准库函数(如strlen()返回size_t

奖金: 这里有一篇关于size_t (以及与之密切相关的ptrdiff_ttypes) 的好文章 (文章被删除,使用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 longunsigned long long可能更有意义。 ( size_t不可能是unsigned charunsigned 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了代码,并告诉人们你正在谈论内存中对象的大小