全局变量,静态变量都是放在静态区
全局变量,静态变量不初始化的时候,默认会被初始化为 0
局部变量,是放在栈区,不初始化,默认值是随机值
即不初始化的时候,全局变量、静态变量为 0,局部变量为随机值
int i; //i=0
int main()
{
i--; //i=-1
if (i > sizeof(i))//-1>4
{
printf(">\n");
}
else
{
printf("<\n");
}
return 0;
}
在这段代码中,我们知道sizeof(i)
应该为4 而i应该为-1,这是不成立的,因此我们的输出结果应该是<
,而实际的输出结果却是
根本原因在于sizeof
这个操作符返回的结果是无符号整型unsigned int
,而i的类型为int
,二者相比会发生整形提升,int就会被转换为unsigned int,此时i的值-1就会被转化为无符号数,二进制会变为32个1即2的32次方-1,可以理解为一个非常大的正数