gpt4 book ai didi

c - for 循环和 size_t 的奇怪行为

转载 作者:太空宇宙 更新时间:2023-11-04 00:22:43 26 4
gpt4 key购买 nike

 size_t size = sizeof(int);
printf("%d\n", size);

int i;
for (i = 0; i < size; i++) {
printf("%d ", i);
}

以上代码(使用gcc)输出

4

0 1 2 3

 size_t size = sizeof(int);
printf("%d\n", size);

int i;
for (i = -1; i < size; i++) {
printf("%d ", i);
}

这段代码(i 被初始化为 -1)在循环中只输出 4 而没有输出。

 size_t size = sizeof(int);
printf("%d\n", size);

int i;
for (i = -1; i < (int) size; i++) {
printf("%d ", i);
}

添加强制转换使代码再次正常运行。输出是

4

-1 0 1 2 3

第二段代码哪里出了问题?为什么 printf 哪里都不会出错?

最佳答案

i < size

i已签署并 size是无符号的,那么 i在执行比较之前转换为无符号。这是所谓的通常算术转换的一部分。

-1转换为无符号类型,结果是无符号类型可表示的最大可能值,因此 i < size i 时为假是-1对于 size 的任何值.

当您使用 i < (int)size 时相反,< 的两个操作数类型为 int ,因此无需执行任何转换,并且由于两个操作数都已签名,您将获得预期的结果。

关于c - for 循环和 size_t 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4311538/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com