求大神帮忙。

诗9趁年华 2018-03-12 08:26:50
以下代码在不同架构芯片的输出结果,详细分析。
union test_t{
struct test2_t{
unsigned char a[4];
int b;
}test2;
int c;
}test;

int main(void){

test.c=0x1234;

printf("a[0]: %x/r/n*,test.test2.a[0]");

printf("a[1]: %x/r/n*,test.test2.a[1]");
}
...全文
512 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
自信男孩 2018-03-12
  • 打赏
  • 举报
回复
#include <stdio.h>


union   test_t{
    struct    test2_t{
        unsigned char a[4];
        int b;
    }test2;
    int c;
}test;

int main(void)
{

    test.c=0x1234;

    printf("a[0]: %x\n*",test.test2.a[0]);

    printf("a[1]: %x\n*",test.test2.a[1]);
}
以上参考一下吧 代码有错误,注意双引号的内容,test.test2.a[0]和test.test2.a[1]是在双引号外的,估计是手误; 输出结果是:
a[0]: 34
a[1]: 12
低位0x34, 高位:0x12; 由于union的占内存的大小是有最大变量的长度决定的。即有test2决定,sizeof(test2)是8(32位系统),因此c是0x1234,等同于test2.a也是0x1234,因此a[0]是0x34, a[1]是0x12
幻夢之葉 2018-03-12
  • 打赏
  • 举报
回复
c的内存位置和大小恰好是a的位置和大小,不同架构下只是大端和小端的问题 先求出这个int转换为4个字节,正序,逆序下取得a[0],a[1]

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧