c++ - 不知道这个指针可能指向什么并且无法解释结果

标签 c++ c pointers hex

这是作为考试中的过去问题给出的,但我无法理解最后 4 个 printf 函数获得的结果。我得到了前 2 个十六进制的转换,但我真的不明白

处有哪些字符
ptr[0] to ptr[3]

这是编译和运行的代码部分。

int main(int argc, char *argv[]){

    typedef unsigned char byte;

    unsigned int nines = 999;
    byte * ptr = (byte *) &nines;

    printf ("%x\n",nines);
    printf ("%x\n",nines * 0x10);
    printf ("%d\n",ptr[0]);
    printf ("%d\n",ptr[1]);
    printf ("%d\n",ptr[2]);
    printf ("%d\n",ptr[3]);

    return EXIT_SUCCESS;
}

这是相应的输出

3e7
3e70
231
3
0
0

最佳答案

当你执行 byte * ptr = (byte *) &nines; 时,你将 ptr 的地址设置为与 nines 相同的地址.它的值为 999,十六进制为 0x3e7

根据问题,我假设 int 有 4 个字节,这是一个小端系统。即字节是这样存储的。

---------------------------------
| 0xe7  |  0x03 |  0x00 |  0x00 |
---------------------------------
  ptr     ptr+1   ptr+2    ptr+3

因此,当您将它们打印出来时,您将获得 231300 的值(231等于0xe7)

在 little endian 系统中,随后是英特尔处理器和当今大多数微 Controller ,首先存储最低有效字节,最后存储最高有效字节。

另一方面,我们有大端系统,其次是一些较旧的摩托罗拉 Controller 和强大的 PC。其中最重要的字节首先存储。这些系统的输出将是 0、0、3 和 231。

关于c++ - 不知道这个指针可能指向什么并且无法解释结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40482741/

相关文章:

c - 有序链表插入

c - 在C中,检查字符串中的偏移量并计算字节数

C函数调用

c - 在 C 中,将指向结构的指针值发送到函数时返回 float 会更改结构的值

c++ - 如何创建一个指向函数指针的指针?

c++ - 复合赋值运算符的类型/转换? (例如 *=(星号等于))

c++ - 如何通过 C++ 启动 explorer.exe?

c++ - 是否有一个表达式使用模来进行反向环绕 ("reverse overflow")?

c++ - 如何包装一个函数以适应另一个函数的所需类型

c++ - 带有高兴的 openGL 加载器的 ImGui 抛出段错误(核心已转储)