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

C++ 引用传参机制

很好,接下来我将为你扩展这两个代码版本(指针传参和引用传参),分别打印出:

  1. 变量本身的地址和值
  2. 参数类型名称(用 typeid
  3. 指针或引用的地址和值
  4. 解引用后的值(对指针)
  5. 全部带详细中文注释

✅ 一、指针版本(int*

#include <iostream>
#include <typeinfo>  // 用于 typeid
using namespace std;// 接收一个 int 型指针
void func(int* a) {cout << "\n[函数 func - 指针传参]" << endl;// 打印 a 的类型cout << "类型(typeid(a)):" << typeid(a).name() << endl;// a 是一个指针,打印它自己的值(指向谁)和地址(自己的地址)cout << "a 的值(即指向对象的地址): " << a << endl;cout << "a 本身的地址(指针变量的地址): " << &a << endl;// 解引用 a,打印 a 所指对象的值cout << "*a(解引用,访问 x 的值): " << *a << endl;
}int main() {int x = 42;  // 普通整型变量cout << "[主函数 main]" << endl;cout << "x 的值: " << x << endl;cout << "x 的地址: " << &x << endl;func(&x);  // 传入 x 的地址return 0;
}

✅ 二、引用版本(int&

#include <iostream>
#include <typeinfo>
using namespace std;// 接收一个 int 类型的引用
void func(int& a) {cout << "\n[函数 func - 引用传参]" << endl;// 打印 a 的类型cout << "类型(typeid(a)):" << typeid(a).name() << endl;// a 是 x 的别名,打印它的值和地址cout << "a 的值: " << a << endl;cout << "a 的地址(即 x 的地址): " << &a << endl;// 注意:不能对引用做“解引用”操作,a 本身就是变量,直接用即可
}int main() {int x = 42;cout << "[主函数 main]" << endl;cout << "x 的值: " << x << endl;cout << "x 的地址: " << &x << endl;func(x);  // 直接传变量return 0;
}

✅ 示例输出说明(示意):

🔹 指针传参输出:

[主函数 main]
x 的值: 42
x 的地址: 0x7ffee6b48d4c[函数 func - 指针传参]
类型(typeid(a)):Pi         // Pi = pointer to int
a 的值(即指向对象的地址): 0x7ffee6b48d4c
a 本身的地址(指针变量的地址): 0x7ffee6b48d40
*a(解引用,访问 x 的值): 42

🔹 引用传参输出:

[主函数 main]
x 的值: 42
x 的地址: 0x7ffee6b48d4c[函数 func - 引用传参]
类型(typeid(a)):i          // i = int
a 的值: 42
a 的地址(即 x 的地址): 0x7ffee6b48d4c

✅ 总结图表:

内容指针方式 (int*)引用方式 (int&)
传入方式func(&x)func(x)
类型(typeid)Pi(Pointer to int)i(int)
参数本身的地址&a 是新地址(func 内部)&a&x 相同
参数本身的值是地址是变量的值
解引用操作需要 *a不需要,a 本身就是变量
是否可以修改原值✅ 是✅ 是

http://www.xdnf.cn/news/4995.html

相关文章:

  • Oracle Fusion常用表
  • AD 绘制原理图--元件的放置
  • 大模型的实践应用39-Qwen3(72B)+langchain框架+MCP(大模型上下文协议)+RAG+传统算法等研发数学教学管理与成绩提升系统
  • 计算几何图形算法经典问题整理
  • 卡洛诗的“破”与“立”
  • RDD转换算子案例
  • 我的AD快捷键方案【留存】
  • C++ -- string
  • 裸机上的 printf:在无操作系统环境下构建 C 标准库
  • 《工业计算机硬件技术支持手册》适用于哪些人群?
  • STM32F103RCT6 + MFC实现网口设备搜索、修改IP、固件升级等功能
  • 西门子 PLC 串口转网口模块(三格电子)
  • 前端使用腾讯地图api实现定位功能
  • Spring生态全景解析:Spring、Spring MVC、SpringBoot与Spring Cloud的关系
  • Google的A2A和MCP什么关系
  • 数据库的SQLSTATE[23000]异常,通过自定义异常类来提供更友好的提示信息
  • STC32G12K128-旋转编码器-软件去抖
  • QT6(35)4.8定时器QTimer 与QElapsedTimer:理论,例题的界面搭建,与功能的代码实现。
  • CSS display: none
  • 2025 年数维杯数学建模B题完整论文代码模型
  • 2025 年数维杯数学建模 C 题完整论文代码模型
  • Linux——进程信号
  • MySQL中的连接池
  • java------------反射
  • JAVA,大花猫大黑狗例题
  • 敦普水性无铬锌铝涂层:汽车紧固件防锈15年,解决螺栓氢脆腐蚀双痛点
  • linux中的日志分割
  • sklearn自定义pipeline的数据处理
  • c++中new和malloc 分配内存有什么不同
  • VSCode远程无法选择虚拟环境问题