#### 20. 数据结构
C/C++ 数组允许定义可存储相同类型数据项的变量,但是**结构**是 C++ 中另一种用户自定义的可用的数据类型,它允许您存储不同类型的数据项。
**定义结构:**
为了定义结构,您必须使用 **struct** 语句。struct 语句定义了一个包含多个成员的新的数据类型,struct 语句的格式如下:
~~~
struct type_name {
member_type1 member_name1;
member_type2 member_name2;
member_type3 member_name3;
.
.
} object_names;
复制代码
~~~
**type\_name** 是结构体类型的名称,**member\_type1 member\_name1** 是标准的变量定义,比如 **int i;** 或者 **float f;** 或者其他有效的变量定义。在结构定义的末尾,最后一个分号之前,您可以指定一个或多个结构变量,这是可选的。下面是声明一个结构体类型 **Movies**,变量为 **movies**:
~~~
//定义结构
struct Movies {
char title[10];
char address[30];
}movies;
复制代码
~~~
**访问结构成员:**
为了访问结构的成员,我们使用**成员访问运算符(.)**。成员访问运算符是结构变量名称和我们要访问的结构成员之间的一个句号。
下面的实例演示了结构的用法:
~~~
//定义结构
struct Movies {
char title[10];
char address[30];
};
void test18() {
//定义结构体变量
Movies movieA, movieB;
//movieA 详述
strcpy(movieA.title, "叶问4");
strcpy(movieA.address, "china");
//movieB 详述
strcpy(movieB.title, "战狼2");
strcpy(movieB.address, "china");
//输出电影信息
cout << movieA.title << "\t" << movieA.address << endl;
cout << movieB.title << "\t" << movieB.address << endl;
}
复制代码
~~~
> **输出:**
>
> 叶问4 china 战狼2 china
**结构体作为函数参数:**
您可以把结构作为函数参数,传参方式与其他类型的变量或指针类似。您可以使用上面实例中的方式来访问结构变量:
~~~
//定义结构
struct Movies {
char title[10];
char address[30];
};
void movieInfo(struct Movies movie);
void test18() {
//定义结构体变量
Movies movieA, movieB;
//movieA 详述
strcpy(movieA.title, "叶问4");
strcpy(movieA.address, "china");
//movieB 详述
strcpy(movieB.title, "战狼2");
strcpy(movieB.address, "china");
//将结构体作为函数参数传递
movieInfo(movieA);
movieInfo(movieB);
}
void movieInfo(struct Movies movie) {
//输出电影信息
cout << movie.title << "\t" << movie.address << endl;
}
复制代码
~~~
> **输出:**
>
> 叶问4 china 战狼2 china
**指针结构的指针:**
您可以定义指向结构的指针,方式与定义指向其他类型变量的指针相似,如下所示:
~~~
struct Movies *struct_pointer;
复制代码
~~~
现在,您可以在上述定义的指针变量中存储结构变量的地址。为了查找结构变量的地址,请把 & 运算符放在结构名称的前面,如下所示:
~~~
struct_pointer = &Movies;
复制代码
~~~
为了使用指向该结构的指针访问结构的成员,您必须使用 -> 运算符,如下所示:
~~~
struct_pointer->title;
复制代码
~~~
让我们使用结构指针来重写上面的实例,这将有助于您理解结构指针的概念:
~~~
//定义结构
struct Movies {
char title[10];
char address[30];
}movies;
void movieInfo(struct Movies *movie);
void test18() {
//定义结构体变量
Movies movieA, movieB;
//movieA 详述
strcpy(movieA.title, "叶问4");
strcpy(movieA.address, "china");
//movieB 详述
strcpy(movieB.title, "战狼2");
strcpy(movieB.address, "china");
//将结构体作为指针传递
movieInfo(&movieA);
movieInfo(&movieB);
}
void movieInfo(struct Movies *movie) {
//输出电影信息
// 为了使用指向该结构的指针访问结构的成员,您必须使用 -> 运算符
cout << movie->title << "\t" << movie->address << endl;
}
复制代码
~~~
> **输出:**
>
> 叶问4 china 战狼2 china
- 前言
- JNI基础知识
- C语言知识点总结
- ①基本语法
- ②数据类型
- 枚举类型
- 自定义类型(类型定义)
- ③格式化输入输出
- printf函数
- scanf函数
- 编程规范
- ④变量和常量
- 局部变量和外部变量
- ⑤类型转换
- ⑥运算符
- ⑦结构语句
- 1、分支结构(选择语句)
- 2、循环结构
- 退出循环
- break语句
- continue语句
- goto语句
- ⑧函数
- 函数的定义和调用
- 参数
- 函数的返回值
- 递归函数
- 零起点学通C语言摘要
- 内部函数和外部函数
- 变量存储类别
- ⑨数组
- 指针
- 结构体
- 联合体(共用体)
- 预处理器
- 预处理器的工作原理
- 预处理指令
- 宏定义
- 简单的宏
- 带参数的宏
- 预定义宏
- 文件包含
- 条件编译
- 内存中的数据
- C语言读文件和写文件
- JNI知识点总结
- 前情回顾
- JNI规范
- jni开发
- jni开发中常见的错误
- JNI实战演练
- C++(CPP)在Android开发中的应用
- 掘金网友总结的音视频开发知识
- 音视频学习一、C 语言入门
- 1.程序结构
- 2. 基本语法
- 3. 数据类型
- 4. 变量
- 5. 常量
- 6. 存储类型关键字
- 7. 运算符
- 8. 判断
- 9. 循环
- 10. 函数
- 11. 作用域规则
- 12. 数组
- 13. 枚举
- 14. 指针
- 15. 函数指针与回调函数
- 16. 字符串
- 17. 结构体
- 18. 共用体
- 19. typedef
- 20. 输入 & 输出
- 21.文件读写
- 22. 预处理器
- 23.头文件
- 24. 强制类型转换
- 25. 错误处理
- 26. 递归
- 27. 可变参数
- 28. 内存管理
- 29. 命令行参数
- 总结
- 音视频学习二 、C++ 语言入门
- 1. 基本语法
- 2. C++ 关键字
- 3. 数据类型
- 4. 变量类型
- 5. 变量作用域
- 6. 常量
- 7. 修饰符类型
- 8. 存储类
- 9. 运算符
- 10. 循环
- 11. 判断
- 12. 函数
- 13. 数学运算
- 14. 数组
- 15. 字符串
- 16. 指针
- 17. 引用
- 18. 日期 & 时间
- 19. 输入输出
- 20. 数据结构
- 21. 类 & 对象
- 22. 继承
- 23. 重载运算符和重载函数
- 24. 多态
- 25. 数据封装
- 26. 接口(抽象类)
- 27. 文件和流
- 28. 异常处理
- 29. 动态内存
- 30. 命名空间
- 31. 预处理器
- 32. 多线程
- 总结
- 音视频学习 (三) JNI 从入门到掌握
- 音视频学习 (四) 交叉编译动态库、静态库的入门学习
- 音视频学习 (五) Shell 脚本入门
- 音视频学习 (六) 一键编译 32/64 位 FFmpeg 4.2.2
- 音视频学习 (七) 掌握音频基础知识并使用 AudioTrack、OpenSL ES 渲染 PCM 数据
- 音视频学习 (八) 掌握视频基础知识并使用 OpenGL ES 2.0 渲染 YUV 数据
- 音视频学习 (九) 从 0 ~ 1 开发一款 Android 端播放器(支持多协议网络拉流/本地文件)
- 音视频学习 (十) 基于 Nginx 搭建(rtmp、http)直播服务器
- 音视频学习 (十一) Android 端实现 rtmp 推流
- 音视频学习 (十二) 基于 FFmpeg + OpenSLES 实现音频万能播放器
- 音视频学习 (十三) Android 中通过 FFmpeg 命令对音视频编辑处理(已开源)