IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++基础5:结构体、联合体、枚举 -> 正文阅读

[C++知识库]C++基础5:结构体、联合体、枚举

目录

一、结构体

1.结构体struct

2.?结构体成员对齐

二、联合体

三、枚举

四、综合运用(L1范数为例)

五、typedef


一、结构体

1.结构体struct

把几个不同类型的成员打包在一起,形成新的数据类型

struct Student{
    char name[4];
    int born;
    bool male; 
};
struct Student stu;//C语言
Student stu;//C++
strcpy(stu.name, "Yu");用.操作成员变量
stu.born = 2000;
stu.male = true;
struct Student stu = {"Yu", 2000, true};//初始化
struct Student students[100];//结构体数组,里面有100个结构体
students[50].born = 2002; 

 

 

13

 

12

 

11

 

10

 

9

male

1

8

born

2000

7

6

5

4

name

0

3

0

2

'u'

1

'Y'

0

 

-1

 

-2

 

2.?结构体成员对齐

struct Student1{
    int id;
    bool male;
    char label;
    float height;
};

 

 

height

 

11

10

9

8

 

7

 

6

label

 

5

male

 

4

id

 

3

2

1

0

 

 

为了io方便把变量对齐,绝对0地址,都是4的倍数,8的倍数height到6,一次性就装不完,装两次,后面读写效率更高?

struct Student2{
    int id;
    bool male;
    float height;
    char label;
};

 

 

 

15

 

14

 

13

label

 

12

weight

 

11

10

9

8

 

7

 

6

 

5

male

 

4

id

 

3

2

1

0

 

 

一般4个字节对齐

二、联合体

一个IP地址

union ipv4address{
std::uint32_t address32;
std::uint8_t address8[4];
};

联合体里面所有成员共享同一个内存

两个变量首地址相同,以最大的成员变量为准

sizeof(union ipv4address) is 4.

Union

Address

 

 

 

p+4

address8[3]

address32

127

p+3

address8[2]

0

p+2

address8[1]

0

p+1

address8[0]

1

p+0

 

p-1

 

三、枚举

替换const

enum color {WHITE, BLACK, RED, GREEN, BLUE, YELLOW, NUM_COLORS};
enum color pen_color = RED;
pen_color = color(3); 
cout << "We have " << NUM_COLORS << " pens." << endl;
pen_color += 1; //error!枚举类型不可做算数运算
int color_index = pen_color;
color_index += 1;
cout << "color_index = " << color_index << endl;

四、综合运用(L1范数为例)

L1范数

enum datatype {TYPE_INT8=1, TYPE_INT16=2, TYPE_INT32=4, TYPE_INT64=8};
//point用来表示3维世界的向量(x,y,z),向量用union表示,向量的数据类型可能不同,该用那个由枚举类型决定
struct Point{
enum datatype type;
union {
std::int8_t data8[3];
std::int16_t data16[3];
std::int32_t data32[3];
std::int64_t data64[3];
};
};
size_t datawidth(struct Point pt)
{
 return size_t(pt.type) * 3;
}

int64_t l1norm(struct Point pt)//L1范数
{
int64_t result = 0;
switch(pt.type)
{
case (TYPE_INT8): 
result = abs(pt.data8[0]) +
abs(pt.data8[1]) +
abs(pt.data8[2]);
break;
 ...

五、typedef

使用 typedef 为现有类型创建别名

typedef int myint;
typedef unsigned char vec3b[3];
typedef struct _rgb_struct{//name _rgb_struct can be omit
unsigned char r;
unsigned char g;
unsigned char b;
} rgb_struct;
myint num = 32;
unsigned char color[3];
vec3b color = {255, 0, 255}; //color是个数组,和上面一样
rgb_struct rgb = {0, 255, 128};

常用在系统头文件

_uint8_t.h

#ifndef _UINT8_T
#define _UINT8_T
typedef unsigned char uint8_t;
#endif /* _UINT8_T */

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-02-03 01:01:01  更:2022-02-03 01:02:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 8:28:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码