struct, union

一、struct

1、定义结构体和结构体变量
struct Point {
    int x;
    int y;
};
struct Point pt;

struct Rect {
    struct Point pt1;
    struct Point pt2;
}
struct Rect screen;

Point和Rect被称为结构标记。

2、赋值结构体(两种方式)
struct Point pt = {0, 20};

struct Point pt;
pt.x = 0;
pt.y = 20;

二、union

1、定义联合结构体
(1) union中可以定义多个成员,但是union内所有的成员共享同一块内存,一次只能使用其中的一个成员。
(2) 对某一个成员赋值,会覆盖其他成员的值(因为所有成员都共享同一块内存)。
(3) union的成员的存放顺序是所有成员都从低地址开始存放的。

union u_tag {
    int ival;
    float fval;
    char *sval;
};
union u_tag u;
该联合体变量可以是int,float,char*中的任何一个。

2、联合体的作用
可以使用union判断大小端模式。

#include <stdio.h>

int main() {
     union Endian {
          int uValue;
          unsigned char str[4];
     };

     union Endian littleEndian;
     littleEndian.uValue = 0x12345678;
     if (littleEndian.str[0] == 0x12){
          printf("Big Endian!\n");
     }else {
          printf("Little Endian!\n");
     }

     return 0;
}


三、位字段

在存储空间有限的情况下,有可能需要将多个对象保存在同一个机器字中。这种使用方式就是位字段。

#define KEYWORD  01
#define EXTERNAL 02
#define STATIC        04

或 enum {KEYWORD = 01, EXTERNAL = 02, STATIC = 04};

为了节省空间,则需要定义位字段

struct Flag {
    unsigned int is_keyword : 1;
    unsigned int is_extern  : 1;
    unsigned int is_static  : 1;
};


本人现经营一个微信订阅号如下:欢迎大家关注,获取相关内容。
订阅号账号是:begginghard_zgh

订阅号名称是:读书笔记 By 张光辉

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值