C++自学 | 7 数据结构

本内容仅属于个人自学记录,欢迎交流和指正,请勿转载或发表不当言论。

主要学习网址: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。

 

posted @ 2020-06-26 12:00  伏延  阅读(207)  评论(0编辑  收藏  举报