我很困惑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 及其简短工作的好例子?
我不太明白你所说的“它的短暂工作”是什么意思。它像任何其他无符号类型一样工作(特别是,就像它被类型化的类型)。size_t
当您描述对象的大小时,我们鼓励您使用。特别是sizeof
运算符和各种标准库函数,例如strlen()
return size_t
。
奖励:这是一篇关于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
另一方面,使用or可能更有意义unsigned long long
。(size_t
不太可能是unsigned char
或unsigned short
,但这是允许的)。
的目的size_t
是让程序员不必担心使用哪种预定义类型来表示大小。
假设sizeof
产生的代码是unsigned int
不可移植的。假设它产生 asize_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 类型是 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 只是平台相关的。