ZERO246 2022-03-15 10:49 采纳率: 100%
浏览 26
已结题

这个程序输出结果是啥呀,给我整晕了

img


第一个输出应该是b
第二个应该是12345678吧
后面的就真的看不出来了,a后一个数我咋知道是啥。

  • 写回答

1条回答 默认 最新

  • 王山之 2022-03-15 11:59
    关注
    
    #include <stdio.h>
    
    int main (int argc, const char *argv[])
    {
        // insert code here..
        unsigned int a,b;
        a = 0x12345678;
        b=-1;
        if (a>b) printf("a\n");
        else printf("b\n");
        printf("a=%x\n",*(&a)); // a取地址然后指针指向该地址的值,也就是还是a的值16进制输出
        printf("a=%x\n",*(&a + 1)); // a取地址,地址+1,然后指针指向该地址的值,该地址对应的值未定义,输出随机
        printf("&a=%p\n", &a);
        printf("char *(&a)=%p\n", (char *)(&a));
        printf("a=%x\n",*((char*) (&a))); // a取地址,然后将int型指针(指向四个字节)转换成char型指针指向一个字节,取该指针对应的地址
        printf("char * (&a)+1=%p", (char*)(&a)+1);
        printf("a=%x\n",*((char*)(&a)+1));
        return 0;
    }
    

    输出:

    b
    a=12345678
    a=ffffffff
    &a=000000000061FE18
    a=78
    char *(&a)=000000000061FE18
    a=56
    char * (&a)+1=000000000061FE19

    定义一个int型的变量,申请四个字节的空间,其实是一个字节表示一部分,比如第一个字节的地址空间表示0x78,第二个字节表示0x56。而char * (&a)的作用就是将int型指针(指向四个字节)转换成char型指针指向一个字节,故*((char *)(&a))取第一个字节的地址空间的值78。如果组合起来看不懂的话,可以按照表达式执行的步骤拆分执行去理解。

    回答不易,请及时采纳

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月25日
  • 已采纳回答 3月17日
  • 创建了问题 3月15日

悬赏问题

  • ¥15 echarts动画效果失效的问题。官网下载的例子。
  • ¥60 许可证msc licensing软件报错显示已有相同版本软件,但是下一步显示无法读取日志目录。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加