zoukankan      html  css  js  c++  java
  • C语言联合体的灵活运用

    一段联合体的程序如下

     1 #include <stdio.h>
     2 typedef union {
     3 unsigned int    a32[2];
     4 unsigned short  a16[1];
     5 unsigned char   a8[1];
     6 } T_union;
     7 
     8 void main()
     9 {
    10     int i;
    11     T_union v={0};
    12     for(i=0;i<8;i++) v.a8[i]=i;
    13 
    14     printf("占用空间:%d
    ",sizeof(v));
    15 
    16     printf("
     a8:");
    17     for(i=0;i<8;i++) printf("%3.2x",v.a8[i]);
    18 
    19     printf("
    a16:");
    20     for(i=0;i<4;i++) printf("%5.4x",v.a16[i]);
    21 
    22     printf("
    a32:");
    23     for(i=0;i<2;i++) printf("%9.8x",v.a32[i]);
    24     printf("
    ");
    25 }

    运行结果

    占用空间:8
    
     a8: 00 01 02 03 04 05 06 07
    a16: 0100 0302 0504 0706
    a32: 03020100 07060504
    Press any key to continue

    可见

    1.联合体变量的占用空间是由联合体成员中占用空间最大的成员决定的。 这段程序中int a32[2] 占用空间最大,为8字节,所以此联合体声明的变量占用空间为8字节

    2.联合体内部成员共用一段内存空间。 并遵循”高高低低“的原则。a8[0]和a8[1]组成一个a16[0] ,a8[1]相对于a8[0]为高地址,a8[1]为a16[0]的高8位。(注意:本程序中并没有定义a8[1],但是可以引用。因为a8[1]仅用来表示地址比a8[0]高1位。但是如果定义成char a8[8]会清晰)。

    3.stm8的单片机不是这样滴,它的高八位内存地址低于低八位

  • 相关阅读:
    Python 数据处理 正则匹配,清洗脏数据
    Pycharm自用激活码
    编程杂谈 集群与分布式
    win10 向右键添加管理员级CMD
    win10 笔记本键盘永久屏蔽Numlk键
    Golong 环境搭建
    python 各种锁机制归纳整理
    MySQL数据库操作
    Web框架本质
    Django框架
  • 原文地址:https://www.cnblogs.com/cntsw/p/3984260.html
Copyright © 2011-2022 走看看