size_t和unsigned int之间的区别?

问题描述 投票:74回答:7

我对size_t很困惑。我在互联网上搜索过,并且到处都提到size_t是一个无符号类型,所以它只能表示非负值。

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

我的第二个问题是:size_tunsigned int可以互换吗?如果没有,那么为什么呢?

谁能给我一个很好的例子size_t并简要介绍它的运作方式?

c types unsigned
7个回答
71
投票

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

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

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

它们不可互换,原因如上所述^^

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

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

奖金:here's a good article关于size_t(和密切相关的ptrdiff_t类型)。它很好地说明了为什么要使用它。


59
投票

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

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

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

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

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

size_t的目的是减轻程序员不必担心哪些预定义类型用于表示大小。

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


9
投票

size_t有一个特定的限制。

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

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

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

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


5
投票

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


2
投票

size_t type是C / C ++语言的基本无符号整数类型。它是sizeof运算符返回的结果的类型。选择类型的大小,以便它可以存储任何类型的理论上可能的数组的最大大小。在32位系统上,size_t将占用32位,64位64位。换句话说,size_t类型的变量可以安全地存储指针。例外是指向类函数的指针,但这是一种特殊情况。尽管size_t可以存储指针,但为此目的最好使用另一个无符号整数类型uintptr_t(它的名称反映了它的功能)。类型size_t和uintptr_t是同义词。 size_t类型通常用于循环计数器,数组索引和地址算法。 size_t类型的最大可能值是常量SIZE_MAX。


2
投票

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


0
投票

简单来说,size_t是平台,也是依赖于实现的,而unsigned int只是依赖于平台的。

© www.soinside.com 2019 - 2024. All rights reserved.