c语言 - 我可以只使用无符号的int而不是size_t吗?



我的印象是size_tunsigned int.但是我可以只编写unsigned int而不是size_t在我的代码中吗?

size_t是描述数组和对象大小时最正确的类型。它保证是无符号的,并且应该"足够大"以容纳给定系统的任何对象大小。因此,它比unsigned int更便携,实际上在所有普通计算机上都是 16 位或 32 位。

因此,在迭代数组时,for循环的最规范形式实际上是:

for(size_t i=0; i<sizeof array/sizeof *array; i++)
{
do_something(array[i]);
}

而不是int i=0;,即使在一些C书籍中也可能更常见。

size_t也是从sizeof运算符返回的类型。在某些情况下,使用正确的类型可能很重要,例如printf("%u", sizeof obj);形式上是未定义的行为,因此理论上可能会使 printf 崩溃或打印乱码。您必须使用%zu进行size_t

size_t很可能恰好与unsigned longunsigned long longuint32_tuint64_t的类型完全相同。

类型size_t是一个无符号类型,能够表示sizeof_Alignof运算符的所有可能结果。 见 https://port70.net/~nsz/c/c11/n1570.html#6.5.3.4p5

unsigned int是 ...int可以表示 0 到 65535 之间的整数。它可能能够表示更大的整数。 请参阅 https://port70.net/~nsz/c/c11/n1570.html#5.2.4.2.1

它们可能是也可能不是同一类型。在现代 64 位机器上,它们不是。

相关内容

  • 没有找到相关文章

最新更新