首页 > 代码库 > c语言内存对齐(1)

c语言内存对齐(1)

在《C陷阱与缺陷》有这样一个例子:

 1 #include <stdio.h>
 2  int
 3  main(void)
 4  {
 5          int i;
 6          char c;
 7          for(i=0;i<5;i++){
 8                  scanf("%d",&c);
 9                  printf("%d ",i);
10          }
11          printf("\n");
12          return 0;
13  }

这个例子是讲printf和scanf函数接受函数应注意的情况的。运行这个例子,会发现,输入1,2,5,7等数,输出一直是0。这是因为scanf读入一个整数,但得到的却是一个指向字符的指针。scanf函数不能分辨这种情况,它只是将这个指向字符的指针作为指向整数的指针而接受,并在指针位置存储一个整数。因为整数所占的存储空间要大于字符,所以字符c附近的内存会被覆盖。c存储的是整数的低位部分,如果输入61147(1111 0000 0000 0111),会得到输出240。