一.虾仁猪心
发现一道题目,小小的题目蕴藏了我太多不知道的点。(还是因为我太菜了)
#include <stdio.h>
int i;
int main()
{
i--;
if (i > sizeof(i))
{
printf(">\n");
}
else
{
printf("<\n");
}
return 0;
}
二.强调的重点
1.全局变量,没有给初始值时,编译其会默认将其初始化为0。因此本题中的i刚开始赋值因为0.
2.siziof()。sizeof()在优快云上的说明是,这个关键字的结果给出的是一个变量或者一个类型在内存中所占空间的大小,单位是字节。该返回值的类型是size_t。具体来说,当这个关键字应用于一个结构变量或者类型的时候,sizeof返回的是变量或者类型实际的大小。当sizeof()应用于一个多维数组时,它返回的是整个数组的大小。但是sizeof()无法返回动态数组和外部变量。且sizeof的返回值类型实际为无符号整形。故此题中sizeof(i)求i类型大小是4。
3. 在i和sizeof()进行比较的时候,编译器会自动将左侧i自动转换为无符号整形的数据。经过i--后,i的值是-1。所以将-1转换为无符号整型时i的值很大。
int main()
{
int i = (unsigned int) -1;
printf("%lld", i); //-1在内存中的补码为全1,将这个值解释为无符号整型,
//则为无符号整型所能表示的最大值,32位下为4294967295。
//无符号输出是把补码直接转化为10进制输出
return 0;
}
4.所以以上最终输出结果为>