响应式网站模仿,网站开发 jsp加密,免费网站重生做军嫂,微信公众平台入口C/C 数组允许定义可存储相同类型数据项的变量#xff0c;但是结构是 C 中另一种用户自定义的可用的数据类型#xff0c;它允许您存储不同类型的数据项。结构用于表示一条记录#xff0c;假设您想要跟踪图书馆中书本的动态#xff0c;您可能需要跟踪每本书的下列属性#x…C/C 数组允许定义可存储相同类型数据项的变量但是结构是 C 中另一种用户自定义的可用的数据类型它允许您存储不同类型的数据项。结构用于表示一条记录假设您想要跟踪图书馆中书本的动态您可能需要跟踪每本书的下列属性Title 标题Author 作者Subject 类目Book ID 书的 ID定义结构在 C 中struct 语句用于定义结构体structure。结构体是一种用户自定义的数据类型用于将不同类型的数据组合在一起。与类class类似结构体允许你定义成员变量和成员函数。为了定义结构您必须使用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变量为bookstruct Books { char title[50]; char author[50]; char subject[100]; int book_id; } book;结构体优点简单数据封装适合封装多种类型的简单数据通常用于数据的存储。轻量级相比class结构体语法更简洁适合小型数据对象。面向对象支持支持构造函数、成员函数和访问权限控制可以实现面向对象的设计。访问结构成员为了访问结构的成员我们使用成员访问运算符.。成员访问运算符是结构变量名称和我们要访问的结构成员之间的一个句号。下面的实例演示了结构的用法实例#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; }实例中定义了结构体类型 Books 及其两个变量 Book1 和 Book2。当上面的代码被编译和执行时它会产生下列结果第一本书标题 : C 教程 第一本书作者 : Runoob 第一本书类目 : 编程语言 第一本书 ID : 12345 第二本书标题 : CSS 教程 第二本书作者 : Runoob 第二本书类目 : 前端技术 第二本书 ID : 12346结构作为函数参数您可以把结构作为函数参数传参方式与其他类型的变量或指针类似。您可以使用上面实例中的方式来访问结构变量实例#include iostream #include cstring using namespace std; void printBook( struct Books book ); // 声明一个结构体类型 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 信息 printBook( Book1 ); // 输出 Book2 信息printBook( Book2 ); return 0; } void printBook( struct Books book ) { cout 书标题 : book.title endl; cout 书作者 : book.author endl; cout 书类目 : book.subject endl; cout 书 ID : book.book_id endl; }当上面的代码被编译和执行时它会产生下列结果书标题 : C 教程 书作者 : Runoob 书类目 : 编程语言 书 ID : 12345 书标题 : CSS 教程 书作者 : Runoob 书类目 : 前端技术 书 ID : 12346结构体的各个部分详细介绍struct 关键字用于定义结构体它告诉编译器后面要定义的是一个自定义类型。成员变量成员变量是结构体中定义的数据项它们可以是任何基本类型或其他自定义类型。在 struct 中这些成员默认是 public可以直接访问。成员函数结构体中也可以包含成员函数这使得结构体在功能上类似于类。成员函数可以操作结构体的成员变量提供对数据的封装和操作。访问权限与 class 类似你可以在 struct 中使用 public、private 和 protected 来定义成员的访问权限。在 struct 中默认所有成员都是 public而 class 中默认是 private。指向结构的指针您可以定义指向结构的指针方式与定义指向其他类型变量的指针相似如下所示struct Books *struct_pointer;以上代码定义了一个指向 Books 结构体的指针 struct_pointer。现在您可以在上述定义的指针变量中存储结构变量的地址。为了查找结构变量的地址请把 运算符放在结构名称的前面如下所示struct_pointer Book1;以上代码将 Book1 结构体变量的地址赋值给 struct_pointer。为了使用指向该结构的指针访问结构的成员您必须使用 - 运算符如下所示struct_pointer-title;以上代码通过 struct_pointer 访问 Book1 结构体的 title 成员。让我们使用结构指针来重写上面的实例这将有助于您理解结构指针的概念实例#include iostream #include string using namespace std; // 声明一个结构体类型 Books struct Books { string title; string author; string subject; int book_id; // 构造函数 Books(string t, string a, string s, int id) : title(t), author(a), subject(s), book_id(id) {} }; // 打印书籍信息的函数接受一个指向 Books 结构体的指针 void printBookInfo(const Books* book) { cout 书籍标题: book-title endl; cout 书籍作者: book-author endl; cout 书籍类目: book-subject endl; cout 书籍 ID: book-book_id endl; } int main() { // 创建两本书的对象 Books Book1(C 教程, Runoob, 编程语言, 12345); Books Book2(CSS 教程, Runoob, 前端技术, 12346); // 使用指针指向这两本书的对象 Books* ptrBook1 Book1; Books* ptrBook2 Book2; // 输出书籍信息传递指针 printBookInfo(ptrBook1); printBookInfo(ptrBook2); return 0; }说明结构体定义Books结构体的定义与之前相同包含title、author、subject和book_id四个成员变量并且有一个构造函数用于初始化这些成员。printBookInfo函数现在这个函数接受一个指向Books结构体的指针const Books* book。在函数内部我们使用-操作符来访问结构体指针所指向的成员变量。main函数创建了两个Books类型的对象Book1和Book2。使用操作符获取这两个对象的地址并将它们赋值给指针ptrBook1和ptrBook2。调用printBookInfo函数时传递的是指向Books对象的指针。当上面的代码被编译和执行时它会产生下列结果书籍标题: C 教程 书籍作者: Runoob 书籍类目: 编程语言 书籍 ID: 12345 书籍标题: CSS 教程 书籍作者: Runoob 书籍类目: 前端技术 书籍 ID: 12346typedef 关键字下面是一种更简单的定义结构的方式您可以为创建的类型取一个别名。例如typedef struct Books { char title[50]; char author[50]; char subject[100]; int book_id; }Books;现在您可以直接使用Books来定义Books类型的变量而不需要使用 struct 关键字。下面是实例Books Book1, Book2;您可以使用typedef关键字来定义非结构类型如下所示typedef long int *pint32; pint32 x, y, z;x, y 和 z 都是指向长整型 long int 的指针。结构体与类的区别在 C 中struct 和 class 本质上非常相似唯一的区别在于默认的访问权限struct默认的成员和继承是public。class默认的成员和继承是private。你可以将struct当作一种简化形式的class适合用于没有太多复杂功能的简单数据封装。结构体与函数的结合你可以通过构造函数初始化结构体还可以通过引用传递结构体来避免不必要的拷贝。实例struct Books {string title;string author;string subject;int book_id;// 构造函数Books(string t, string a, string s, int id): title(t), author(a), subject(s), book_id(id) {}void printInfo() const {cout 书籍标题: title endl;cout 书籍作者: author endl;cout 书籍类目: subject endl;cout 书籍 ID: book_id endl;}};void printBookByRef(const Books book) {book.printInfo();}