【C++】`->` 符号

-> 符号在 C++ 中被称为成员访问运算符(Member Access Operator)。它用于访问类的成员变量或成员函数,特别是在指针的情况下。

具体用法

1. 访问类的成员变量

假设有一个类 ListNode

cpp 复制代码
class ListNode {
public:
    int val;
    ListNode* next;
    ListNode(int x) : val(x), next(nullptr) {}
};

如果你有一个指向 ListNode 的指针 node,你可以使用 -> 访问其成员变量:

cpp 复制代码
ListNode* node = new ListNode(5);
node->val = 10;  // 使用 -> 访问并修改 val 成员变量

在这个例子中,node->val 等价于 (*node).val,但 -> 更简洁和常用。

2. 访问类的成员函数

假设 ListNode 类有一个成员函数 printVal

cpp 复制代码
class ListNode {
public:
    int val;
    ListNode* next;
    ListNode(int x) : val(x), next(nullptr) {}

    void printVal() {
        std::cout << "Value: " << val << std::endl;
    }
};

你可以使用 -> 调用该成员函数:

cpp 复制代码
ListNode* node = new ListNode(5);
node->printVal();  // 使用 -> 调用 printVal 成员函数

在这个例子中,node->printVal() 等价于 (*node).printVal(),但 -> 更简洁和常用。

示例代码分析

在你的代码中,-> 符号被广泛使用,以下是一些具体的例子:

1. 在 mergeSort 函数中
cpp 复制代码
ListNode* mergeSort(ListNode *head) {
    if (!head || !head->next) return head;
    // ...
    pre_slow->next = NULL;
    // ...
    ListNode *l1 = mergeSort(head);
    ListNode *l2 = mergeSort(slow);
    // ...
}
  • head->next 用于判断链表中是否有至少两个节点。
  • pre_slow->next = NULL; 用于断开链表,使其分成两部分。
2. 在 merge2SortedLists 函数中
cpp 复制代码
ListNode* merge2SortedLists(ListNode *l1, ListNode *l2) {
    ListNode *head = new ListNode(0), *p = head;
    while (l1 && l2) {
        if (l1->val <= l2->val) {
            p->next = l1;
            p = p->next;
            l1 = l1->next;
        } else {
            p->next = l2;
            p = p->next;
            l2 = l2->next;
        }
    }
    // ...
}
  • l1->vall2->val 用于比较两个链表当前节点的值。
  • p->next = l1p->next = l2 用于将较小的节点链接到新链表中。
  • l1 = l1->nextl2 = l2->next 用于移动指针到下一个节点。

总结

-> 符号在 C++ 中用于通过指针访问类的成员变量和成员函数。它在链表操作中尤为常见,因为它简洁且直观。通过使用 ->,你可以方便地访问和操作链表中的节点及其成员。

相关推荐
小汉堡编程2 小时前
数据结构——vector数组c++(超详细)
数据结构·c++
tan180°7 小时前
MySQL表的操作(3)
linux·数据库·c++·vscode·后端·mysql
彭祥.8 小时前
Jetson边缘计算主板:Ubuntu 环境配置 CUDA 与 cudNN 推理环境 + OpenCV 与 C++ 进行目标分类
c++·opencv·分类
lzb_kkk8 小时前
【C++】C++四种类型转换操作符详解
开发语言·c++·windows·1024程序员节
胖大和尚10 小时前
clang 编译器怎么查看在编译过程中做了哪些优化
c++·clang
钱彬 (Qian Bin)11 小时前
一文掌握Qt Quick数字图像处理项目开发(基于Qt 6.9 C++和QML,代码开源)
c++·开源·qml·qt quick·qt6.9·数字图像处理项目·美观界面
Me4神秘11 小时前
电信、移动、联通、广电跨运营商网速慢原因
网络
双叶83612 小时前
(C++)学生管理系统(正式版)(map数组的应用)(string应用)(引用)(文件储存的应用)(C++教学)(C++项目)
c语言·开发语言·数据结构·c++
源代码•宸12 小时前
C++高频知识点(二)
开发语言·c++·经验分享
数通Dinner13 小时前
RSTP 拓扑收敛机制
网络·网络协议·tcp/ip·算法·信息与通信