当前位置: 首页 > news >正文

C++中的(星号*、点 . 与箭头 ->)

1、解引用运算符 *

int x = 10;
int* p = &x;   // p 保存 x 的地址
int y = *p;    // y 变成 10
*p = 20;       // 改变 x 的值为 20

语义:把指针指向的那块内存“打开”成一个对象。

2、点 . 与箭头 ->

TreeNode  n;         // n 是对象
TreeNode* p = &n;    // p 是指针n.val = 5;           // 对象用点
p->val = 5;          // 指针用箭头
(*p).val = 7;        // 等价写法(手动解引用再点)

.:对象.成员

左边必须是对象(栈上或 new 出来的都行),不是指针。

->:指针->成员

左边必须是指针(含智能指针的 operator-> 情况)。

3、做个题

题目:

给你一个 二叉树 的根结点 root,该二叉树由恰好 3 个结点组成:根结点、左子结点和右子结点。
如果根结点值等于两个子结点值之和,返回 true ,否则返回 false 。

在这里插入图片描述
在这里插入图片描述

解题1:

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:bool checkTree(TreeNode* root) {return (*root).val==(*(*root).left).val+(*(*root).right).val;}
};

解题2

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:bool checkTree(TreeNode* root) {return root->val==root->left->val+root->right->val;}
};

总结

  • 解引用:把“地址”变“对象”
  • . 成员访问:对象 → 成员
  • -> 指针成员访问:指针 → (自动解引用) → 成员
http://www.xdnf.cn/news/1011403.html

相关文章:

  • FIORI如何debug//Manager Fiori App
  • 【Linux系统编程】进程信号 - 信号产生
  • 什么是单细胞测序?
  • 端侧推理新标杆——MiniCPM 4本地部署教程:5%稀疏度实现128K长文本7倍加速,低成本训练开销匹敌Qwen3-8B
  • 从传统楼盘到智慧空间:数字孪生的地产赋能之路
  • Day 47 训练
  • 论文略读:HR-Extreme: A High-Resolution Dataset for Extreme Weather Forecasting
  • MybatisPlus-DQL查询+DML
  • MS91050模拟前端可Pin to Pin兼容LMP91050
  • codeforces 2057D. Gifts Order
  • 动态规划2——路径动态规划
  • [MSPM0开发]MSPM0G3507之GPIO输入、输出、中断使用(基于driverlib库)
  • firebase异常捕获
  • ssc377d系统裁剪(16M nor flash)
  • 非标定制超声波清洗设备的核心技术解析与应用
  • RAID 阵列有哪些?分别有什么作用?
  • 【读代码】RAG文档解析工具Marker
  • 日语单词总结
  • Flink 系列之二十九- Flink SQL - 中间算子:窗口聚合
  • Ubuntu安装RTX5090显卡驱动
  • Java开发中常见的语法陷阱与规避方法
  • ThreadPoolTaskExecutor+CompletableFuture实现多线程异步数据同步和自定义线程池监控和动态调整实现
  • 网络原理9-HTTP2
  • 三轴云台之运动控制系统篇
  • C++ 语言基础之数据类型详解
  • LangGraph入门教程:构建循环状态管理的LLM应用
  • 哪些方面可以做PCDN
  • Memory Repair (五)
  • SMB协议在Windows内网中的核心地位
  • Java SE - 继承与多态