我想知道ar [i]中第9行会发生什么!= -1。结果是循环没有停止,但我不确定原因。
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 }
谢谢,
答案 0 :(得分:8)
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
测试循环条件。或者,您可以使用数组维度而不是sentinel值。