我可以只使用 unsigned int 而不是 size_t 吗?

Can I just use unsigned int instead of 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 崩溃或打印乱码。 size_t.

你必须使用 %zu

很可能 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 位机器上,它们不是。