size_t和unsigned int之间的区别?

Vik*_*rma 86 c unsigned types

我很困惑size_t.我在互联网上搜索过并且提到的size_t是无符号类型,因此它可以表示非负值.

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

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

谁能给我一个很好的例子size_t和简短的工作?

小智 75

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

因为unsigned int不是唯一的无符号整数类型.size_t可以是任意的unsigned char,unsigned short,unsigned int,unsigned longunsigned long long,取决于实施.

第二个问题是,size_tunsigned int可以互换与否,如果没有,为什么?

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

任何人都可以给我一个关于size_t及其简短工作的好例子吗?

我的"简短工作"并不能说明你的意思.它的工作方式与任何其他无符号类型一样(特别是类似于typedeffed的类型).建议size_t您在描述对象的大小时使用.特别是,sizeof运算符和各种标准库函数,如strlen()返回size_t.

额外奖励:这是一篇很好的文章(文章已删除,使用返回机器快照)size_t(以及密切相关的ptrdiff_t类型).它很好地说明了为什么要使用它.


Kei*_*son 64

C中有5种标准无符号整数类型:

  • unsigned char
  • unsigned short
  • unsigned int
  • unsigned long
  • unsigned long long

对其尺寸和范围有各种要求(简而言之,每种类型的范围是下一种类型范围的子集,但其中一些可能具有相同的范围).

size_t是一个typedef(即,一个别名)的一些无符号类型,(可能是上述但可能的的一个扩展的无符号整数类型,尽管这是不太可能).它是sizeof运营商产生的类型.

在一个系统中,unsigned int用于表示大小可能是有意义的; 另一方面,使用unsigned long或更有意义unsigned long long.(size_t不太可能是unsigned char或者unsigned short,但是这是允许的).

目的size_t是减轻程序员不必担心使用哪种预定义类型来表示大小.

假设sizeof产生的代码unsigned int不可移植.假设它产生a的代码size_t更可能是可移植的.

  • 我认为这应该是公认的答案,因为它解释了为什么你应该使用size_t (5认同)

DrY*_*Yap 9

size_t 有特定的限制.

引自http://www.cplusplus.com/reference/cstring/size_t/:

其中一个基本无符号整数类型的别名.

它是一种能够以字节为单位表示任何对象大小的类型:size_t是sizeof运算符返回的类型,在标准库中广泛用于表示大小和计数.

它不可互换,unsigned int因为大小int由数据模型指定.例如,LLP64使用32位int,ILP64使用64位int.

  • 引用来自哪里?(这不是C标准.) (5认同)
  • 问题被标记为[tag:c]。C ++标准与C无关。 (2认同)

Tho*_*thy 7

size_t用于存储数据对象的大小,并保证能够保存特定C实现可以创建的任何数据对象的大小。此数据类型可以更小(以位数为单位),更大或与unsigned int完全相同。


Ed *_*eal 7

除了其他答案之外,它还记录了代码并告诉人们您正在谈论内存中对象的大小