我对size_t
很困惑。我在互联网上搜索过,并且到处都提到size_t
是一个无符号类型,所以它只能表示非负值。
我的第一个问题是:如果它仅用于表示非负值,为什么我们不使用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
和unsigned int
是否可以互换,如果没有,那么为什么呢?
它们不可互换,原因如上所述^^
。
任何人都可以给我一个关于size_t及其简短工作的好例子吗?
我的“简短工作”并不能说明你的意思。它的工作方式与任何其他无符号类型一样(特别是类似于typedeffed的类型)。当您描述对象的大小时,建议您使用size_t
。特别是,sizeof
运算符和各种标准库函数,如strlen()
,返回size_t
。
奖金:here's a good article关于size_t
(和密切相关的ptrdiff_t
类型)。它很好地说明了为什么要使用它。
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
的代码不可移植。假设它产生size_t
的代码更可能是可移植的。
size_t
有一个特定的限制。
引自http://www.cplusplus.com/reference/cstring/size_t/:
其中一个基本无符号整数类型的别名。
它是一种能够以字节为单位表示任何对象大小的类型:size_t是sizeof运算符返回的类型,在标准库中广泛用于表示大小和计数。
它不能与unsigned int
互换,因为int
的大小由数据模型指定。例如,LLP64使用32位int
,ILP64使用64位int
。
size_t用于存储数据对象的大小,并保证能够保存特定C实现可以创建的任何数据对象的大小。此数据类型可能比unsigned int更小(位数),更大或完全相同。
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。
除了其他答案之外,它还会记录代码并告诉人们您正在谈论内存中对象的大小
简单来说,size_t是平台,也是依赖于实现的,而unsigned int只是依赖于平台的。