【问题标题】:Hexadecimal array in pointer指针中的十六进制数组
【发布时间】:2019-10-06 22:07:38
【问题描述】:
 # include <stdio.h>
 int main()
 {
    char p[]={0x01,0x02,0x03,0x04};
    int *q = p;
    printf("%x",*q);
    return 0;

  }

当我运行上面的代码时,答案是 4030201。为什么?

【问题讨论】:

  • “为什么?”因为你运气不好。是否检测到印有“UB”的代码。请问为什么'你很幸运!
  • int *q = p; 在 C 中是非法的。你的编译器告诉你了。剩下的只是对未定义代码的实验。

标签: c


【解决方案1】:

这是因为您在 little-endian 架构机器(例如 x86)上编译和运行代码

首先,您将 4 个字节按顺序放入内存中:01 02 03 04。比将指向该数组的指针转换为指向 int 的指针。在 little-endian 机器内存块上,01 02 03 04 表示整数值 0x04030201,将在下一步打印。

更多信息请参见https://en.m.wikipedia.org/wiki/Endianness

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-20
    • 2013-01-11
    • 2018-11-07
    • 1970-01-01
    • 1970-01-01
    • 2018-05-17
    • 2011-12-09
    • 1970-01-01
    相关资源
    最近更新 更多