我可以只使用 unsigned int 而不是 size_t 吗?
Can I just use unsigned int instead of size_t?
我的印象是 size_t
是 unsigned 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 long
或 unsigned long long
或 uint32_t
或 uint64_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 位机器上,它们不是。
我的印象是 size_t
是 unsigned 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 long
或 unsigned long long
或 uint32_t
或 uint64_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 位机器上,它们不是。