博客
关于我
自定义类型
阅读量:549 次
发布时间:2019-03-09

本文共 1709 字,大约阅读时间需要 5 分钟。

1.结构体

结构体的声明

1.普通结构体

struct tag{       member-list;}variable-list;

2.匿名结构体

struct {   	int a;	char b;	float c;}x;

结构的自引用

struct Node{   	int data;	struct Node * next;}

结构体变量的定义和初始化

1.普通结构体定义和初始化

struct Point{   	int x;	int y;}p1;//p1为结构体类型的变量struct Point p2; //定义结构体变量p2struct Point p3 = {   2,3};//初始化结构体变量

2.嵌套结构体定义和初始化

struct Node{   	int data;	struct Point p;	struct Node * next;}n1 = {   10,{   4,5},NULL};

结构体内存对齐

1.为什么要内存对齐

如果不内存对齐,因为硬件平台的限制,进而访存次数增加,进而降低效率
2.什么是内存对齐
通过牺牲空间的方法来换取效率的提升叫做内存对齐
3.内存对齐的原则
(1)第一个元素不需要对齐,直接存放
(2)其他成员变量要对齐(指的是起始偏移量能够整除对齐数)到某个数字(对齐数)的整数倍的地址数
(3)结构体的总大小为最大对齐数的整数倍
(4)如果嵌套了结构体的情况,嵌套的结构体要对齐到自己的最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍

修改默认对齐

1.#pragma pack(2),修改默认对齐字节数为2,对齐数取2与结构体变量对齐数的较小值

2.#pragma pack(),取消设置的默认对齐数,还原为默认

2.位段

1.什么是位段

1.位段的成员可以是int,unsigned int或signed int

2.位段的成员名后边有一个冒号和一个数字

2.实例

struct A{   	int _a:2;	int _b:5;	int _c:10;	int _d:30;};//printf("%d\n",sizeof(struct A)); 2
#include
#define MAX_SIZE A+Bstruct _Record_Struct{ unsigned char Env_Alarm_ID : 4; unsigned char Para1 : 2; unsigned char state; unsigned char avail : 1; }*Env_Alarm_Record;int main(){ printf("%d\n",(sizeof(struct _Record_Struct) )); //3 return 0;}

运行结果:

3

3.枚举

1.{ }中存放的是枚举常量

2.默认从0开始,依次增1

枚举的优点

1.增加代码的可读性和可维护性

2.和#define定义的标识符比较,枚举有类型检查,更加严谨
3.防止了命名污染
4.便于调试
5.使用方便,可以一次定义多个变量

4.联合

1.联合的成员是共同用同一块内存空间

2.联合体的大小至少是最大成员的大小
3.当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍

示例

#include
union Un{ int i; char c;};union Un un;int main(){ printf("%p\n", &(un.c)); printf("%p\n", &(un.i)); return 0;}

运行结果:

00C1A13C
00C1A13C

判断大小端

#include
int main(){ union Un { int i; char c; }; union Un un; un.i = 1; printf("%d\n", un.c); return 0;}

运行结果:

1

转载地址:http://dezpz.baihongyu.com/

你可能感兴趣的文章
Nacos命名空间配置_每个人用各自自己的命名空间---SpringCloud Alibaba_若依微服务框架改造---工作笔记001
查看>>
Nacos和Zookeeper对比
查看>>
Nacos在双击startup.cmd启动时提示:Unable to start embedded Tomcat
查看>>
Nacos基础版 从入门到精通
查看>>
Nacos如何实现Raft算法与Raft协议原理详解
查看>>
Nacos安装教程(非常详细)从零基础入门到精通,看完这一篇就够了
查看>>
Nacos实战攻略:从入门到精通,全面掌握服务治理与配置管理!(上)
查看>>
Nacos实战攻略:从入门到精通,全面掌握服务治理与配置管理!(下)
查看>>
Nacos心跳机制实现快速上下线
查看>>
nacos报错com.alibaba.nacos.shaded.io.grpc.StatusRuntimeException: UNAVAILABLE: io exception
查看>>
nacos服务提供和发现及客户端负载均衡配置
查看>>
Nacos服务注册与发现demo
查看>>
Nacos服务注册与发现的2种实现方法!
查看>>
nacos服务注册和发现原理简单实现案例
查看>>
Nacos服务注册总流程(源码分析)
查看>>
nacos服务注册流程
查看>>
Nacos服务部署安装
查看>>
nacos本地可以,上服务器报错
查看>>
Nacos注册Dubbo(2.7.x)以及namespace配置
查看>>
Nacos注册中心有几种调用方式?
查看>>