我想知道在ari != -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 }谢谢,
发布于 2016-04-21 13:05:34
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进行循环条件测试。或者,您可以使用数组维度而不是哨位值。
https://stackoverflow.com/questions/36770376
复制相似问题