今日遇到的易错题
c
#include <stdio.h>
int i;//全局变量默认初始化是0
int main()
{
i--;//-1
if (i > sizeof(i))
{
printf(">\n");
}
else
{
printf("<\n");
}
return 0;
}
易错点:sizeof的返回值类型实际为无符号整形,因此编译器会自动将左侧i自动转换为无符号整形的数据,-1对应的无符号整形是一个非常大的数字,超过4或者8,故输出>
c
#include <stdio.h>
int main()
{
int arr[] = {1,2,3,4,5};
short *p = (short*)arr;//short类型通常是两个字节
int i = 0;
for(i=0; i<4; i++)
{
*(p+i) = 0;//通过指针修改了arr[0]和arr[1]
}
for(i=0; i<5; i++)
{
printf("%d ", arr[i]);//在统一输出数组内容
}
此题结果应为0 0 3 4 5