您的位置:首页 > 其它

struct, union

2014-03-02 18:47 369 查看
一、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 张光辉

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息