我几乎假设这是一个愚蠢的问题......但我真的找不到答案。所以我在这里问这个。
为了了解隐式类型转换,我在 C 上运行以下代码。
#include <stdio.h>
int main()
{
unsigned char i;
char cnt = -1;
int a[255];
for (int k = 0; k < 255; k++)
{
a[k] = k;
}
for (i = cnt - 2; i < cnt; i--)
{
a[i] += a[i + 1];
printf("%d\n", a[i]);
}
return 0;
}
当我运行这个程序时,什么也没发生。
在第一次迭代时,我发现for循环的循环条件为假,所以程序立即退出了for循环。
但是,我不明白为什么。
据我所知,C 在分配或比较不同类型的变量时会进行隐式转换。所以我认为 on i = cnt - 2
,减法运算使值 -3,然后隐式转换为 i 分配值 253。
那么,条件不应该i < cnt
为真,因为(由于比较有符号和无符号字符而通过另一个隐式转换 cnt)253 小于 255?
如果不是,为什么这是假的?有什么我错过的还是有一些我不知道的例外?