• 【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
  • 相关阅读:
    xml文件报错 ORA-00907: 缺失右括号
    选择适合您的项目管理软件:哪个更好?
    内网配置git代理
    中缀表达式转后缀表达式详细思路及代码实现
    SQL语言的分类:DDL(数据库、表的增、删、改)、DML(数据的增、删、改)
    【excel】一些实例3
    Golang-01Golang开发环境配置
    【二、http】go的http基本请求设置(设置查询参数、定制请求头)get和post类似
    Android Studio中配置jdk版本无效问题
    c++ 类的实例化顺序
  • 原文地址:https://blog.csdn.net/qq_43557907/article/details/125528676