【易错题】C语言
今日遇到的易错题
#include <stdio.h>
int i;//全局变量默认初始化是0
int main()
{i--;//-1if (i > sizeof(i)){printf(">\n");}else{printf("<\n");}return 0;
}
易错点:sizeof的返回值类型实际为无符号整形,因此编译器会自动将左侧i自动转换为无符号整形的数据,-1对应的无符号整形是一个非常大的数字,超过4或者8,故输出>
#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