亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> C语言

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语言

  1. 革新数据存储:带隐形斗篷的次世代磁性纳米结构
  2. 深入理解 C++ 数据类型:基础类型、修饰符与最佳实践
  3. 掌握 C++ 运算符:六大类型全解析与实战示例
  4. C++ 注释最佳实践:编写可读、可维护代码的注释艺术
  5. C++ char 类型完全指南:声明、ASCII 码、输入输出与字符串转换
  6. C 语言结构体详解:高效组织复杂数据
  7. C 语言 Typedef 详解:自定义类型名简化代码
  8. C++数据结构实战:结构体struct定义、访问、函数参数、指针与typedef别名
  9. C++数据抽象实战:接口与实现分离的设计艺术
  10. C++数据封装:守护代码安全的核心机制
  11. C# 结构体完全指南:定义、特性、与类的区别及实战
  12. Java 经典数据结构:Vector、Stack、Hashtable 等遗留类详解