登录  | 立即注册

游客您好!登录后享受更多精彩

查看: 58|回复: 0

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

[复制链接]

82

主题

2

回帖

107

积分

网站编辑

积分
107
发表于 2025-1-25 11:00:56 | 显示全部楼层 |阅读模式

结构体

定义结构

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

#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
*/

结构作为函数参数

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

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

void printBook( struct Books book );

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

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

指向结构的指针

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

struct Books *struct_pointer;

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

#include<iostream>
#include<cstring>

using namespace std;

void printBook( struct Books *book );

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

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 的。

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

void printBook( struct Books *book );

// 声明一个结构体类型 Books 
struct Books{
    string  title;
    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 关键字

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

typedef struct Books {
    char title[50];
    char author[50];
    char subject[100];
    int book_id;
} Books;

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

Books Book1, Book2;

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

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

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

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|断点社区 |网站地图

GMT+8, 2025-2-5 17:47 , Processed in 0.096078 second(s), 27 queries .

Powered by XiunoBBS

Copyright © 2001-2025, 断点社区.

快速回复 返回顶部 返回列表