【易错题】C语言

今日遇到的易错题

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