我想知道 ar[i] != -1 中的第 9 行发生了什么。结果是循环没有停止,但我不确定为什么。
4 int main()
5 {
6 unsigned char ar[] = {1, 2, 3, 4, 5, -1};
7 int i;
8
9 for (i = 0; ar[i] != -1; i++)
10 {
11 printf("ar: %u\n", ar[i] );
12 }
13 printf("out: %u\n", ar[i] );
14
15 return 0;
16
17 }
谢谢,
最佳答案
unsigned char ar[] = {1, 2, 3, 4, 5, -1};
将 ar[5]
初始化为 (unsigned char )-1
,即 255
,因为无符号算术通过回绕来工作。
然后你做 ar[5] != -1
。 整数提升 将左侧从 unsigned char
变为 int
而不更改值。这使得比较 255 != -1
为真,因此循环继续。
一个解决方案是针对 (unsigned char)-1
测试循环条件。或者,您可以使用数组维度而不是标记值。
关于将 unsigned char 与负数进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36770376/