guyihui 发表于 2022-1-1 16:35:10

39讲课后作业求助

#include <stdio.h>

int main(void)
{
      char a = 0, b = 0;
      int *p = (int *)&b;

      *p = 258;

      printf("%d %d\n", a, b);

      return 0;
}

为什么我的Linx系统结果是a = 0, b = 2啊,和小甲鱼的结果不一样,想了好长时间想不通,兄弟们帮我看看呗

jhq999 发表于 2022-1-1 18:01:12

本帖最后由 jhq999 于 2022-1-1 18:04 编辑

258=0x00000102
所以小端模式下char类型变量b=2
大端模式下 b=0

guyihui 发表于 2022-1-1 18:28:12

jhq999 发表于 2022-1-1 18:01
258=0x00000102
所以小端模式下char类型变量b=2
大端模式下 b=0

我知道小端b=2, 但是为啥a = 0啊, 不应该是a = 1吗

傻眼貓咪 发表于 2022-1-1 20:42:07

guyihui 发表于 2022-1-1 18:28
我知道小端b=2, 但是为啥a = 0啊, 不应该是a = 1吗

我试了你的代码,显示 a = 1, b = 2,我是 Windows - gcc 编译,我不清楚 Linux 汇编怎么操作的

jhq999 发表于 2022-1-1 20:46:42

本帖最后由 jhq999 于 2022-1-1 20:51 编辑

guyihui 发表于 2022-1-1 18:28
我知道小端b=2, 但是为啥a = 0啊, 不应该是a = 1吗

申请内存时a和b没挨着呗
#include <stdio.h>

int main(void)
{
      char a = 0, b = 0;
      int *p = (int *)&b;
      
      *p = 258;

      printf("%d %d\n", a, b);
      printf("%p %p\n", &a, &b);//看看a和b的地址
      

      return 0;
}
0 2
008FF93B 008FF92F

guyihui 发表于 2022-1-2 15:53:35

jhq999 发表于 2022-1-1 20:46
申请内存时a和b没挨着呗

哦哦哦,对对, 恍然大悟,谢谢大哥{:10_323:}
页: [1]
查看完整版本: 39讲课后作业求助