首页 > 编程语言 >C++引用

C++引用

时间:2023-09-03 10:45:02浏览次数:52  
标签:10 temp int C++ 传递 引用 指针

首先引用是什么?在教程里说引用就是起别名。在我学过这一部分后觉得引用其实就是属于指针,有点像是指针的语法缩写。

怎么说呢,我认为就两点

  1. 三种传递
  2. 引用是什么,引用的本质

1、三种传递

值传递不改变实参,地址传递和引用传递改变实参

 1 #include <iostream>
 2 using namespace std;
 3 
 4 //1、值传递
 5 void mySwap01(int a,int b)
 6 {
 7     int temp=a;
 8     a=b;
 9     b=temp;
10 }
11 //2、地址传递
12 void mySwap02(int*a,int*b)
13 {
14     int temp=*a;
15     *a=*b;
16     *b=temp;
17 }
18 //3、引用传递
19 
20 //说是可以简化指针修改实参
21 void mySwap03(int &a,int &b)
22 {
23     int temp=a;
24     a=b;
25     b=temp;
26 }
27 int main()
28 {
29     int a=10,b=20;
30     int c=10,d=20;
31     int e=10,f=20;
32     mySwap01(a,b);//值传递
33     cout<<"a="<<a<<endl;
34     cout<<"b="<<b<<endl;
35     mySwap02(&c,&d);//地址传递 参数填地址
36     cout<<"c="<<c<<endl;
37     cout<<"d="<<d<<endl;
38     mySwap03(e,f);//引用传递 
39     cout<<"e="<<e<<endl;
40     cout<<"f="<<f<<endl;
41     
42     return 0;
43 }

 

2、引用是什么,引用的本质

 1 #include <iostream>
 2 using namespace std;
 3 
 4 //1、不要返回局部变量的引用
 5 //同指针,非法引用出现随机数
 6 //2、函数的调用可以做为左值
 7 
 8 //引用的本质
 9 void func(int & ref){
10     ref = 100;//ref是引用,转换为*ref=100
11 }
12 
13 int main()
14 {    
15     //引用必须初始化
16     //引用在初始化后,不可以改变
17     int a=10;
18     //引用的初始化
19     int &b=a;//b的地址与a相同,b和a的地址相同
20     //自动转换为int* const b = &a;
21     //指针常量是指针指向不可改,也说明为什么引用不可更改
22     int *c=&a;//指针c指向a的地址
23     b=*c*2;
24     cout<<"a="<<a<<endl;
25     cout<<"b="<<b<<endl;
26     cout<<"c(是个地址)="<<(int)c<<endl;
27     cout<<"&a(a的地址)="<<(int)&a<<endl;
28     cout<<"&b(b的地址)="<<(int)&b<<endl;
29     cout<<"&c(c(地址)的地址)="<<(int)&c<<endl;
30     cout<<"*c="<<*c<<endl;
31     cout<<"b==*c&&b==c?\t";
32     if(b==*c&&&b==c){
33         cout<<"Yes"<<endl;
34     }
35     else{
36         cout<<"No"<<endl;
37     }
38     
39     int d = 10;
40     
41     //自动转换为int* const ref = &d;指针常量是指针指向不可改,也说明为什么引用不可更改
42     int& ref =d;
43     ref = 30;//内部发现ref是引用,自动帮助我们转换为:*ref=20;
44     
45     cout<<"d: "<<d<<endl;
46     cout<<"ref: "<<ref<<endl;
47     
48     func(d);
49     cout<<"d: "<<d<<endl;
50     cout<<"ref: "<<ref<<endl;
51     //结论:C++推荐用引用技术,因为语法方便,引用的本质是指针常量,但是所有的指针操作编译器都帮我们做了
52     return 0;
53 }

 

标签:10,temp,int,C++,传递,引用,指针
From: https://www.cnblogs.com/hwq123/p/17674586.html

相关文章

  • 如何使用C++11原子操作实现自旋锁
    什么是自旋锁?C++自旋锁是一种低层次的同步原语,用于保护共享资源的访问。自旋锁是一种轻量级的锁,适用于短时间的资源锁定。自旋锁的特点:当一个线程尝试获取已经被另一个线程占有的自旋锁时,这个线程会进入一个循环(自旋),在这个循环中它不断地检查锁是否已经被释放。如果锁已经被释放,那......
  • C++的基类和派生类构造函数
    基类的成员函数可以被继承,可以通过派生类的对象访问,但这仅仅指的是普通的成员函数,类的构造函数不能被继承。构造函数不能被继承是有道理的,因为即使继承了,它的名字和派生类的名字也不一样,不能成为派生类的构造函数,当然更不能成为普通的成员函数。在设计派生类时,对继承过来的成员变量......
  • c++ 堆排序
    堆排序主要分为两个函数:1、构建堆2、元素调整#include<iostream>usingnamespacestd;voidmaxHeap(inttree[],intn,inti){ if(i>=n) return; intlchild=i*2+1; intrchild=i*2+2; intmax=i; if(lchild<n&&tree[lchild]>t......
  • C++ Core Guidelines解析 电子书 pdf
    关注公众号:红宸笑。回复:电子书即可  在《C++CoreGuidelines解析》中,C++专家讲师RainerGrimm提炼出了CoreGuidelines中的精髓,去除了晦涩难懂的内容,分享了新的见解和背景,并提供了自己培训课程中经过充分测试的示例。对于使用C++11及后续版本C++的有经验程序员,G......
  • C++刷题输入输出和常用函数处理
    1.输入数字但非默认的十进制,比如输入的是十六进制数,但要转为十进制再进行别的处理。当我们在编程中处理十六进制数时,通常会将其表示为字符串。cin>>hex>>m;//输入十六进制,m会自动转十进制。2.int和string中单个字符互转strings="12345";inta0=s[0]-'0';//字符转......
  • C++语言学习07
    一、类型信息运算符typeid在C++中typeid可以获取数据的类型,但是需要加头文件typeinfofind/usr/include-nametypeinfo1、typeid是运算符,执行运算符函数,执行的返回值类型是type_info类类型对象2、type_info中有个name的成员函数3、type_info中还重载了==运算符,可以直接......
  • linux C++ UDP
    1.UDP与TCP差异:注意:UDP不同于TCP,没有请求连接过程connect()与受理过程accpet(),因此无法区分客户端与服务器端。TCP与UDP差异仅仅在于TCP存在在不可靠IP层的流控制机制,所以TCP可以提供可靠数据服务,形象化的比喻就是TCP相当于打电话,而UDP相当于信封,电话得先建立一个可靠的信道,再......
  • c++编译
    1.1c++编译c++脚本程序写完之后,并不能直接运行,需要进行编译,转成.o文件,再链接才能运行,一般包括:预处理,汇编,编译。链接四步,如下:预编译把.c源文件编译成.ii预处理文件gcc-E[源文件.c]-o[自定义名.ii]编译成汇编语言把.i文件编译成.s汇编语言文件gcc-S[......
  • C++程序的内存模型--模型四区
      C++中在程序运行前分为全局区和代码区 代码区特点是共享和只读 全局区中存放全局变量、静态变量、常量 常量区中存放const修饰的全局变量和字符串常量 //栈区//由编译器自动分配释放、存放函数的参数值、局部变量等//注意:不要返回局部变量的地址,栈区开辟的数据由编译器......
  • linux开发C/C++
    最近在部署项目的时候总是会遇到关于C++的编译问题,由于之前学习C++只是为了参加算法竞赛,缺少这一部分的知识,所以学习一下这一相关内容,并做一下记录参考:VSCode开发C++七讲【基于VSCode和CMake实现C/C++开发|Linux篇】https://www.bilibili.com/video/BV1fy4y1b7TC?p=17&vd_sourc......