gpt4 book ai didi

c - 使用 "malloc"后的输出

转载 作者:行者123 更新时间:2023-11-30 21:19:04 25 4
gpt4 key购买 nike

我编写了以下代码:

#include <stdio.h>
#include <stdlib.h>

int main()
{
int *p=(int *)malloc(sizeof(int));
*p=0x8F7E1A2B;
printf("%x\n",*p);

unsigned char *q=p;

printf("%x\n",*q++);
printf("%x\n",*q++);
printf("%x\n",*q++);
printf("%x\n",*q++);

return 0;
}

代码输出如下所示:

8F7E1A2B
2B
1A
7E
8F

任何人都可以解释一下这段代码的输出吗?提前致谢。

最佳答案

我猜您希望以 Big Endian 顺序获取字节,即 8F-7E-1A-2B

这完全取决于 endianness您的体系结构:字节顺序是数字的二进制表示形式中的字节顺序。最常见的是:

  • 大端字节序:最高有效字节位于最低地址,其余字节按降序排列。即8F-7E-1A-2B
  • Little Endian:最低有效字节位于最低地址,其余字节按升序排列。即2B-1A-7E-8F。您的架构是小端字节序
  • 混合字节序:所有其他不属于大字节序或小字节序的字节配置都是可能的,并且它们属于混合字节序的名称。即 7E-8F-2B-1A1A-2B-8F-7E

顺便说一下,you shouldn't cast the result of malloc :

int *p = (int *)malloc(sizeof(int)); // nope

int *p = malloc(sizeof(int)); // yep

关于c - 使用 "malloc"后的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59137031/

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