本内容仅属于个人自学记录,欢迎交流和指正,请勿转载或发表不当言论。
主要学习网址:https://www.runoob.com/
7.1 Cplus/C++ 数据结构
1. 定义:
结构 是C++中另一种用户自定义的可用数据类型,允许存储不同类型的数据项。
struct type_name { member_type1 member_name1; member_type2 member_name2; ... } object_names;
type_name 是结构体类型的名称。
member_type1 member_name1 是标准的变量定义。
在结构定义末尾,最后一个分号前,可以指定一个或多个结构变量。
【实例:
struct Books{ char title[50]; char author[50]; char subject[100]; int bool_id; } book;
2. 访问结构成员:
使用 成员访问运算符(.)
【实例:图书访问管理
#include <iostream> #include <cstring> using namespace std; // 声明一个结构体类型 Books struct Books { char title[50]; char author[50]; char subject[100]; int book_id; }; int main( ) { Books Book1; // 定义结构体类型 Books 的变量 Book1 Books Book2; // 定义结构体类型 Books 的变量 Book2 // Book1 详述 strcpy( Book1.title, "C++ 教程"); strcpy( Book1.author, "Runoob"); strcpy( Book1.subject, "编程语言"); Book1.book_id = 12345; // Book2 详述 strcpy( Book2.title, "CSS 教程"); strcpy( Book2.author, "Runoob"); strcpy( Book2.subject, "前端技术"); Book2.book_id = 12346; // 输出 Book1 信息 cout << "第一本书标题 : " << Book1.title <<endl; cout << "第一本书作者 : " << Book1.author <<endl; cout << "第一本书类目 : " << Book1.subject <<endl; cout << "第一本书 ID : " << Book1.book_id <<endl; // 输出 Book2 信息 cout << "第二本书标题 : " << Book2.title <<endl; cout << "第二本书作者 : " << Book2.author <<endl; cout << "第二本书类目 : " << Book2.subject <<endl; cout << "第二本书 ID : " << Book2.book_id <<endl; return 0; }
3. 结构作为函数参数:
结构 可以作为函数参数,传参方式与其他类型的变量或指针类似。
【实例:利用 结构 作为参数重写上个例子
#include <iostream> #include <cstring> using namespace std; void printfBook(struct Books Book1); // 声明一个结构体类型 Books struct Books { char title[50]; char author[50]; char subject[100]; int book_id; }; int main() { Books Book1; // 定义结构体类型 Books 的变量 Book1 Books Book2; // 定义结构体类型 Books 的变量 Book2 // Book1 详述 strcpy_s(Book1.title, "C++ 教程"); strcpy_s(Book1.author, "Runoob"); strcpy_s(Book1.subject, "编程语言"); Book1.book_id = 12345; // Book2 详述 strcpy_s(Book2.title, "CSS 教程"); strcpy_s(Book2.author, "Runoob"); strcpy_s(Book2.subject, "前端技术"); Book2.book_id = 12346; // 输出 Book1 信息 printfBook(Book1); // 输出 Book2 信息 printfBook(Book2); return 0; } void printfBook(struct Books Book1) { cout << "书标题 : " << Book1.title << endl; cout << "书作者 : " << Book1.author << endl; cout << "书类目 : " << Book1.subject << endl; cout << "书 ID : " << Book1.book_id << endl; }
4. 指向结构的指针:
定义指向结构的指针:
strcut type_name *struct_pointer;
在上述定义的指针变量中存储 结构变量 的地址,为了取得结构变量的地址,需要使用运算符 & :
struct_pointer = &object_name;
使用该结构的指针访问结构成员时,需要使用运算符(->):
struct_pointer -> member_name1;
【实例:使用结构指针重写上述实例
#include <iostream> #include <cstring> using namespace std; void printfBook(struct Books *Book1); // 声明一个结构体类型 Books struct Books { char title[50]; char author[50]; char subject[100]; int book_id; }; int main() { Books Book1; // 定义结构体类型 Books 的变量 Book1 Books Book2; // 定义结构体类型 Books 的变量 Book2 // Book1 详述 strcpy_s(Book1.title, "C++ 教程"); strcpy_s(Book1.author, "Runoob"); strcpy_s(Book1.subject, "编程语言"); Book1.book_id = 12345; // Book2 详述 strcpy_s(Book2.title, "CSS 教程"); strcpy_s(Book2.author, "Runoob"); strcpy_s(Book2.subject, "前端技术"); Book2.book_id = 12346; // 输出 Book1 信息 printfBook(&Book1); // 输出 Book2 信息 printfBook(&Book2); return 0; } void printfBook(struct Books *Book1) { cout << "书标题 : " << Book1->title << endl; cout << "书作者 : " << Book1->author << endl; cout << "书类目 : " << Book1->subject << endl; cout << "书 ID : " << Book1->book_id << endl; }
5. typedef 关键字:
更简单的定义结构的方式,可以为创建的类型取一个别名。
typedef struct Books { char title[50]; char author[50]; char subject[100]; int book_id; }Books;
typedef 的省略问题:
省略时,object_names 相当于一个变量,可以直接调用结构体中的内容;
不省略时,object_names 部分时个结构体类型,在调用结构体之前必须创建结构体的变量。
6. 结构作为函数的返回值:
#include <stdio.h> #include <stdlib.h> struct test { int i; char c; double d; float f; }; struct test set(int a, float b, char c, double d) { struct test t; t.i = a; t.f = b; t.c = c; t.d = d; return t; } void sig(int s); void print(struct test t2) { printf("int:%d\n", t2.i); printf("char:%c\n", t2.c); printf("float:%f\n", t2.f); printf("double:%lf\n", t2.d); } void sig(int s) { printf("捕获信号%d,跳出……", s); exit(1); } int main(void) { struct test info; info = set(2, 3.22, 'd', 4.335); print(info); return 0; }
执行上述代码后得到以下结果:
int:2 char:d float:3.220000 double:4.335000
7. 对于结构体变量,还可以限制成员的位数大小:
struct demo(int demoint:1);
这样 demoint 成员只占一个 B。