C++数据结构实战:结构体struct定义、访问、函数参数、指针与typedef别名
数组仅能聚合同类型数据,结构体(struct)可组合不同类型数据项,常用于表示记录。例:图书管理需记录标题、作者、主题、书号。
定义结构体
语法:
struct [结构体标签] {
成员定义;
...
} [一个或多个结构体变量];
标签可选。成员定义即普通变量定义。定义Books结构:
struct Books {
char title[50];
char author[50];
char subject[100];
int book_id;
} book; // 可选变量声明
访问结构体成员
使用成员访问运算符.(点号)。示例:
#include <iostream>
#include <cstring>
using namespace std;
struct Books {
char title[50];
char author[50];
char subject[100];
int book_id;
};
int main() {
struct Books Book1, Book2;
strcpy(Book1.title, "Learn C++ Programming");
strcpy(Book1.author, "Chand Miyan");
strcpy(Book1.subject, "C++ Programming");
Book1.book_id = 6495407;
strcpy(Book2.title, "Telecom Billing");
strcpy(Book2.author, "Yakit Singha");
strcpy(Book2.subject, "Telecom");
Book2.book_id = 6495700;
cout << "Book 1 title : " << Book1.title << endl;
cout << "Book 1 author : " << Book1.author << endl;
cout << "Book 1 subject : " << Book1.subject << endl;
cout << "Book 1 id : " << Book1.book_id << endl;
cout << "Book 2 title : " << Book2.title << endl;
cout << "Book 2 author : " << Book2.author << endl;
cout << "Book 2 subject : " << Book2.subject << endl;
cout << "Book 2 id : " << Book2.book_id << endl;
return 0;
}
输出两本书完整信息。
结构体作为函数参数
传递方式同普通变量/指针。按值传递(拷贝副本)或传地址。示例封装printBook函数:
void printBook(struct Books book); // 声明
// ... 定义同前 ...
int main() {
// ... 赋值同前 ...
printBook(Book1);
printBook(Book2);
return 0;
}
void printBook(struct Books book) {
cout << "Book title : " << book.title << endl;
cout << "Book author : " << book.author << endl;
cout << "Book subject : " << book.subject << endl;
cout << "Book id : " << book.book_id << endl;
}
结构体指针
定义指针:struct Books *struct_pointer;
取地址:struct_pointer = &Book1;
通过指针访问成员用->运算符:struct_pointer->title;
重写printBook接受指针版本:
void printBook(struct Books *book) {
cout << "Book title : " << book->title << endl;
cout << "Book author : " << book->author << endl;
cout << "Book subject : " << book->subject << endl;
cout << "Book id : " << book->book_id << endl;
}
int main() {
// ... 赋值同前 ...
printBook(&Book1);
printBook(&Book2);
return 0;
}
输出结果相同。
typedef简化结构体使用
为结构体起别名,省去struct关键字:
typedef struct {
char title[50];
char author[50];
char subject[100];
int book_id;
} Books;
// 直接用Books定义变量
Books Book1, Book2;
typedef亦适用于非结构体:
typedef long int *pint32;
pint32 x, y, z; // 均为long int*类型
C语言
- 革新数据存储:带隐形斗篷的次世代磁性纳米结构
- 深入理解 C++ 数据类型:基础类型、修饰符与最佳实践
- 掌握 C++ 运算符:六大类型全解析与实战示例
- C++ 注释最佳实践:编写可读、可维护代码的注释艺术
- C++ char 类型完全指南:声明、ASCII 码、输入输出与字符串转换
- C 语言结构体详解:高效组织复杂数据
- C 语言 Typedef 详解:自定义类型名简化代码
- C++数据结构实战:结构体struct定义、访问、函数参数、指针与typedef别名
- C++数据抽象实战:接口与实现分离的设计艺术
- C++数据封装:守护代码安全的核心机制
- C# 结构体完全指南:定义、特性、与类的区别及实战
- Java 经典数据结构:Vector、Stack、Hashtable 等遗留类详解