zoukankan      html  css  js  c++  java
  • C语言使用%d占位符给char类型变量赋值问题浅探

    经测试,在windows环境下,char a和int b这类形式的是在栈区申请的内存,因此先申请的内存地址比后申请的内存地址要高。

    而%d在32位系统中,代表的是4字节int整型数据,如果给高地址的char变量赋值后,再给低地址的char赋值,(前提是这两个变量是先后申请的,他们的地址会紧挨着),那么给低地址赋值的时候就会把高地址赋值的内容给覆盖掉。

    测试代码如下:

        //测试使用%d占位符给char类型变量赋值时,实际改动了几个字节(4字节)
        char a;
        scanf("%d",&a);
        printf("%d %d %d %d
    ",*&a,*(&a+1),*(&a+2),*(&a+3));    //%d表示的int类型整型值
        /*
        运行:
        25369874        //对应的二进制:1 10000011 00011101 00010010
        18 29 -125 1
        */
        char a;
        char b;
        //scanf("%d %d",&a,&b);    //a为高地址,b为低地址,所以先给a赋值再给b赋值的话,a的位置会被b所覆盖掉
        scanf("%d %d",&b,&a);    //因此如果希望成功运算,应该先给低地址的b赋值,再给高地址的a赋值
        printf("%d %d
    ",&a,&b);
        printf("%d
    ",a+b);
        /*
        运行:
        63 86
        1245007 1245006        //a高 b低
        149
        */
  • 相关阅读:
    Activiti学习笔记1 — 下载与开发环境的配置
    JavaScript实现本地图片上传前进行裁剪预览
    我国县及县级以上城市编码
    一些小技巧
    NodeJS学习之异步编程
    NodeJS学习之网络操作
    NodeJS学习之文件操作
    Sass和Compass设计师指南
    Sass
    CKEditor配置及使用
  • 原文地址:https://www.cnblogs.com/eryuanch/p/10723856.html
Copyright © 2011-2022 走看看