我试图理解为什么这个程序不起作用
#include<stdio.h>
#define TOTAL_ELEMENTS (sizeof(array) / sizeof(array[0]))
int array[] = {23,34,12,17,204,99,16};
int main()
{
int d;
for(d=-1;d <= (TOTAL_ELEMENTS-2);d++)
printf("%d\n",array[d+1]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我在C.中进行自动类型转换时,我遇到了这个程序.但我不明白有符号和无符号数据类型之间的转换是如何发生的.请解释一下.谢谢,哈里什
sizeof()是无符号类型,Wile d是签名.
你检查是否d小于无符号整数.因此,签名d转换为unsinged.
但是-1当读取为无符号时,有符号表示符号的大小大于2 ^ 31,并且明显大于那么TOTAL_ELEMENTS-2,因此条件永远不会满足,并且您甚至不会进入for循环一次.
看看这个代码快照,它可能会为你清理一些事情:
#include <stdio.h>
#include <stdlib.h>
int main() {
unsigned int x = 50;
int y = -1;
printf("x < y is actually %u < %u which yields %u\n", y,x,y < x);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码打印:
x <y实际上是4294967295 <50,产生0