zoukankan      html  css  js  c++  java
  • 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("
    ");
    12          return 0;
    13  }

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

  • 相关阅读:
    转基因(转载)
    Diwali
    使用Matplotlib画图
    项目格式规范
    关于Dapper
    JQuery
    javascript封装
    2015年2月16日——作者观点
    2015年2月12日——不懂点
    在VS2013上使用git
  • 原文地址:https://www.cnblogs.com/xianzhedeyu/p/3784046.html
Copyright © 2011-2022 走看看