gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 06:59:20 24 4
gpt4 key购买 nike

这是作为考试中的过去问题给出的,但我无法理解最后 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com