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 张光辉
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 张光辉
相关文章推荐
- volatile,extern,struct,union,enum
- C++:struct和union 内存字节对齐问题
- JAVA 与C语言中struct union 字节流转换方案 Javolution
- union and struct
- union和struct的内存分配&&判断正方形&&函数的隐式转换
- struct/union/enum的区别
- struct和union大小的计算方法
- 结构struct 联合Union和枚举Enum的细节讨论
- struct和union的区别
- union和struct的区别
- C语言中的struct、union、enum、Typedef
- struct 和 union 区别
- 06-struct.union
- C++ union/struct使用小结
- <struct、union、enum>差异
- 面试再谈struct和union大小问题
- Struct&Union
- struct和Union的区别
- Struct 和 Union区别
- struct union enum