• 【C++】C++学习记录.DAY5-结构体的使用


    0.参考

    菜鸟教程-数据结构

    https://blog.csdn.net/weixin_43914889/article/details/107869575

    1.结构体创建与访问

    参考如下代码,包含了结构体类型的创建、声明、赋值、函数传参的方法,与 C 大同小异。

    #include <iostream>
    #include <string.h>
    using namespace std;
    // 声明一个结构体类型
    struct ListNode
    {
       int val;
       ListNode *next;
       ListNode(int x) : val(x), next(nullptr) {}
    };
    
    void printNode2(struct ListNode node)
    {
       cout << "val2 : " << node.val <<endl;
    }
    
    
    int main( )
    {
       struct ListNode n2 = {2}; // 初始化
       n2.val = 22; // 赋值
    
       // 输出 Node 信息
       printNode2(n2);
    
       return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    2.结构体指针

    定义指向结构的指针

    ListNode *n1; 
    
    • 1

    在上述定义的指针变量中存储结构变量的地址

    n1 = new ListNode(1);
    
    • 1

    使用指向该结构的指针访问结构的成员

    n1->val = 11;
    
    • 1

    于是,我们便可以对上述代码进行优化,将传递结构体对象改为传递结构体指针,从而减少内存空间的占用

    #include <iostream>
    #include <string.h>
    using namespace std;
    // 声明一个结构体类型
    struct ListNode
    {
       int val;
       ListNode *next;
       ListNode(int x) : val(x), next(nullptr) {}
    };
    
    void printNode1(struct ListNode *node)
    {
       cout << "val1 : " << node->val <<endl;
    }
    
    int main( )
    {
       struct ListNode *n1 = new ListNode(1);
       struct ListNode n2 = {2};
       n1->next = &n2;
    
       n1->val = 11;
       n2.val = 22;
    
       // 输出 Node 信息
       printNode1(n1);
       printNode1(n1->next);
    
       return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    3.typedef 关键字

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

    typedef struct ListNode {
        int val;        // 节点值
        ListNode *next; // 后继节点引用
        ListNode(int x) : val(x), next(NULL) {}
    }ListNode ;
    
    • 1
    • 2
    • 3
    • 4
    • 5

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

    ListNode n1, n2;
    
    • 1

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

    typedef long int *pint32;
     
    pint32 x, y, z;
    
    • 1
    • 2
    • 3

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

    4.初始化

    4.1 通过冒号初始化

    形如:

    结构体名(传入参数): 成员变量1(参数1),成员变量2(参数2{}
    • 1

    这是一个链表的节点:

    struct ListNode {
        int val;        // 节点值
        ListNode *next; // 后继节点引用
        ListNode(int x) : val(x), next(NULL) {}
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5

    实例化方法如下:

    // 实例化节点
    ListNode *n1 = new ListNode(4); // 节点 head
    ListNode *n2 = new ListNode(5);
    ListNode *n3 = new ListNode(1);
    
    // 构建引用指向,形成链表
    n1->next = n2;
    n2->next = n3;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    4.2 直接初始化

    直接在初始化时在{}中传入对应参数值即可

    ListNode n4 = {2, NULL};
    
    • 1

    4.3 构造函数初始化

    在上一章的学习中,我们学会了类的构造函数初始化方法,结构体构造函数初始化方法与其类似。

    typedef struct Entry{
        int _key;
        int _value;
        Entry(int key,int value){
            this->_key = key;
            this->_value = value;
        }
    };
    
    int main(){
        Entry b(2,3);
    
        cout<< b._key << b._value <<endl;
    
        return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
  • 相关阅读:
    《深入理解分布式事务:原理与实战》读书笔记
    java毕业设计商场会员管理系统源码+lw文档+mybatis+系统+mysql数据库+调试
    c语言实现数据结构中的顺序表
    高通Android 12/13实现USB拔出关机功能
    需求是怎么一步一步变态的
    Nginx几种负载均衡方式介绍
    数据结构_链表
    Rust Vs Go:从头构建一个web服务
    股票数据集2-纳斯达克NASDAQ 100 分析
    Linux 内核参数:slabinfo
  • 原文地址:https://blog.csdn.net/qq_43557907/article/details/125528676