c语言内存对齐(1)

时间:2014-06-16 06:02:54   收藏:0   阅读:377

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

bubuko.com,布布扣
 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  }
bubuko.com,布布扣

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

c语言内存对齐(1),布布扣,bubuko.com

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!