天行健 发表于 2025-1-25 11:00:56

C++基础知识06.结构体

# 结构体

## 定义结构

使用 struct 关键字来定义结构体。struct 语句定义了一个包含多个成员的新的数据类型,struct 语句的格式如下:

```cpp
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; 或者其他有效的变量定义。在结构定义的末尾,最后一个分号之前,可以指定一个或多个结构变量。一个结构体类型 Books,变量为 book:

```cpp
#include<iostream>
#include<cstring>
using namespace std;

struct Books{
    string title;
    string author;
    int bookId;
};

int main(){
    struct Books b;
    b.title = "CPP";
    b.author = "Bruke";
    b.bookId = 1;

    cout<<b.title<<endl;
    cout<<b.author<<endl;
    cout<<b.bookId<<endl;
}
/*
CPP
Bruke
1
*/
```

## 结构作为函数参数

我们可以把结构作为函数参数,传参方式与其他类型的变量或指针类似。可以使用上面实例中的方式来访问结构变量

```cpp
#include<iostream>
#include<cstring>
using namespace std;

void printBook( struct Books book );

// 声明一个结构体类型 Books
struct Books{
   stringtitle;
};

int main( ){
   Books Book1;      // 定义结构体类型 Books 的变量 Book1
   Books Book2;      // 定义结构体类型 Books 的变量 Book2

    Book1.title = "one";
    Book2.title = "two";

   // 输出 Book2 信息
   printBook( Book1 );
   printBook( Book2 );

   return 0;
}

void printBook( struct Books book ){
   cout << "书标题 : " << book.title <<endl;
}
```

当上面的代码被编译和执行时,它会产生下列结果:

```
书标题 : one
书标题 : two
```

## 指向结构的指针

我们也可以定义指向结构的指针,方式与定义指向其他类型变量的指针相似,如下所示:

```cpp
struct Books *struct_pointer;
```

用结构体指针重写上面的代码

```cpp
#include<iostream>
#include<cstring>

using namespace std;

void printBook( struct Books *book );

// 声明一个结构体类型 Books
struct Books{
   stringtitle;
};

int main( ){
    Books Book1;      // 定义结构体类型 Books 的变量 Book1
    Books Book2;      // 定义结构体类型 Books 的变量 Book2

    Book1.title = "one";
    Book2.title = "two";

   // 输出 Book2 信息
   printBook(&Book1);
   printBook(&Book2);

   return 0;
}

void printBook( struct Books *book ){
   cout << "书标题 : " << book->title <<endl;
}
```

## C++的结构体

C++ 的结构体本质上就是一个类。只不过所有的字段都是 public 的。

```cpp
#include<iostream>
#include<cstring>
using namespace std;

void printBook( struct Books *book );

// 声明一个结构体类型 Books
struct Books{
    stringtitle;
    Books(){};
    Books(string title){
      this->title = title;
    };
};

int main(){
    Books Book1;      // 定义结构体类型 Books 的变量 Book1
    Book1.title = "one";
    Books *b = new Books("struct is a class");
    // 输出 Book2 信息
    printBook(&Book1);
    printBook(b);
    return 0;
}
void printBook( struct Books *book ){
   cout << "书标题 : " << book->title <<endl;
}
/*
书标题 : one
书标题 : struct is a class
*/
```

## typedef 关键字

下面是一种更简单的定义结构的方式,您可以为创建的类型取一个"别名"。例如:

```cpp
typedef struct Books {
    char title;
    char author;
    char subject;
    int book_id;
} Books;
```

现在,您可以直接使用 *Books* 来定义 *Books* 类型的变量,而不需要使用 struct 关键字。下面是实例:

```cpp
Books Book1, Book2;
```

您可以使用 <b>typedef</b> 关键字来定义非结构类型,如下所示:

```cpp
typedef long int *pint32;
pint32 x, y, z;
```

x, y 和 z 都是指向长整型 long int 的指针。

AO1199 发表于 前天 16:13

好好学习 ,天天向上1
页: [1]
查看完整版本: C++基础知识06.结构体