C++引用的学习

引用系列

本质:在C++内部是一个指针常量

1.语法 数据类型 &别名 = 本名

提要点:
1.引用必须初始化
2.引用在初始化后,不可改变值

#include<iostream> using namespace std; //用引用代替指针 void swap1(int a,int b) { int tmp = a; a = b; b = tmp; cout<<a<<" "<<b<<"\n";//仅在函数体内部交换 } int main() { //引用基本语法:实例 // int a = 10; // int &b = a; // b = 20; // cout<<a<<"\n"; // int a = 10; // int &b = a; // int &c = a;//报错!引用 变量 "c" 需要初始值设定项 // int d = 20; // b = d;//赋值操作,而不是更改引用 // cout<<b<<c<<"\n"; int a = 10,b = 20; swap1(a,b); cout<<a<<" "<<b<<"\n";//值传递其实没有实质上的交换,只是拷贝了一份,在内部函数进行交换 return 0; }


2.引用传参

注意:形参会影响实参
地址传递

//地址传递 #include<iostream> using namespace std; void swap1(int *a,int *b) { int tmp = *a; *a = *b; *b = tmp; } int main() { int a = 10; int b = 20; swap1(&a,&b); cout<<a<<" "<<b<<"\n"; return 0; }

引用传递

#include<iostream> using namespace std; void swap1(int &ar,int &br) { int tmp = ar; ar = br; br = tmp; } int main() { int a = 10,b = 20; swap1(a,b); cout<<a<<" "<<b<<"\n"; return 0; }


3.引用做函数返回值

提要点:
1.不要返回局部变量的引用
2.函数调用作为左值(也就是函数调用可以被赋值)

#include<iostream> using namespace std; //不要返回局部变量 //原因如下 // int &test() // { // int b = 10; // return b; // //这里是返回局部变量,属于栈区,程序执行完后直接丢掉 // //我这里显示直接报错了 // } //接下来是函数可以作为左值的实例 int &test1() { static int a = 10;//把它化为静态变量,属于全局区,不会因为程序的结束而自动释放变量 return a; } int main() { // int &h = test(); // cout<<h<<"\n"; int &h = test1(); cout<<h<<"\n"; return 0; }


4.常量引用

提要点:主要是为了防止误修改的值影响原本应该要操作的值

#include<iostream> using namespace std; void Print(const int &a)//改成const常量就不会轻易修改值了 { //a = 500;//如果我任意改一下值,那么形参里的数值也会变 cout<<a<<"\n"; } int main() { //int &tmp = 10;//注意:这里报错了,引用的时候必须是一个合法的内存空间 //const int &tmp = 10; //这里的const 将它修饰成了: /* int a = 10; int &tmp = a; */ int tmp = 10; Print(tmp); return 0; }

__EOF__

本文作者Alaso_shuang
本文链接https://www.cnblogs.com/Alaso687/p/18698092.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   Alaso_shuang  阅读(12)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
2 3
4
点击右上角即可分享
微信分享提示