【C++初阶(三)】引用详解(对比指针)(上)

简介: 【C++初阶(三)】引用详解(对比指针)

💓博主CSDN主页:杭电码农-NEO💓


⏩专栏分类:C++初阶之路


🚚代码仓库:NEO的学习日记🚚


🌹关注我🫵带你学习排序知识

  🔝🔝



1. 前言

C语言中有一利器: 指针
而C++中增加了另一利器: 引用
这两个板块的存在
极大了提升了C/C++的可用性!

本篇文章将给大家详细讲解引用
并且分析引用和指针的联系和区别
最后给大家拓展C++中的空指针


2. 引用的概念

概念:

引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空
间,它和它引用的变量共用同一块内存空间

比如说孙悟空又叫
孙行者,齐天大圣,斗战胜佛

李逵又叫黑旋风,铁牛

类型& 引用变量名(对象名) = 引用实体
引用符号:&

举个例子来说明:

int a = 10;
    int& ra = a;//<====定义引用类型
    printf("%p\n", &a);//打印地址
    printf("%p\n", &ra);

打印出来的地址相同


并且引用值改变,原先的值也会改变!

int a = 10;
    int& ra = a;
    cout << ra <<' '<< a;
    cout << endl;
    ra = 20;
    cout << ra << ' ' << a;

a的值会从10被修改成20


3. 引用的特性

引用特性:

  1. 引用在定义时必须初始化
  2. 一个变量可以有多个引用
  3. 一旦引用一个实体,就不能引用其他实体

特性讲解:


int a = 10;
int& ra; // 没初始化,会报错
int& ra = a;
int& rra = a;
int& rrra = a;
//这三个都是a的引用,只要其中一个
//发生改变,其他三个也会改变
printf("%p %p %p %p\n", &a, &ra, &rra, &rrra);  

int a = 10;
int& ra = a;
int b = 20;
ra = b; //这条语句的意思是将b的值赋值给a
        //而不是ra从a的引用变成b的引用
cout << ra << ' ' << a << ' ' << b;
cout << endl;
printf("a的地址:%p ra的地址:%p b的地址:%p", &a, &ra, &b);

可以看见ra的地址和a是一样的
一旦引用初始化后就不能改变引用对象


4. 常引用

顾名思义就是引用常量
但是常量具有不可修改性
所以引用一个常量时要加上const

const int a = 10;
//int& ra = a;   // 该语句编译时会出错,a为常量
const int& ra = a;
// int& b = 10; // 该语句编译时会出错,b为常量
const int& b = 10;
double d = 12.34;
//const int& rd = d; // 该语句编译时会出错,类型不同
const double& rd = d;

并且引用的类型要对上

int类型的引用对应int&

double类型的引用对应double&


5. 使用场景

5.1 引用做函数参数

引用做函数参数

之前在写C程序的交换函数时
因为形参是实参的一份拷贝
想要改变实参就要传地址
而现在有了引用就不用传地址了!

void Swap(int& left, int& right)//交换函数
{
   int temp = left;
   left = right;
   right = temp;
}
int a = 10;
int b = 20;
Swap(a,b);//因为形参为引用,所以这传的是a,b的引用

注: 引用传参时,不用加符号&

& 符号放在类型后面时是引用

其他地方& 符号都是取地址!

相关文章
|
27天前
|
存储 编译器 Linux
【c++】类和对象(上)(类的定义格式、访问限定符、类域、类的实例化、对象的内存大小、this指针)
本文介绍了C++中的类和对象,包括类的概念、定义格式、访问限定符、类域、对象的创建及内存大小、以及this指针。通过示例代码详细解释了类的定义、成员函数和成员变量的作用,以及如何使用访问限定符控制成员的访问权限。此外,还讨论了对象的内存分配规则和this指针的使用场景,帮助读者深入理解面向对象编程的核心概念。
65 4
|
2月前
|
存储 安全 编译器
在 C++中,引用和指针的区别
在C++中,引用和指针都是用于间接访问对象的工具,但它们有显著区别。引用是对象的别名,必须在定义时初始化且不可重新绑定;指针是一个变量,可以指向不同对象,也可为空。引用更安全,指针更灵活。
|
2月前
|
存储 C++
c++的指针完整教程
本文提供了一个全面的C++指针教程,包括指针的声明与初始化、访问指针指向的值、指针运算、指针与函数的关系、动态内存分配,以及不同类型指针(如一级指针、二级指针、整型指针、字符指针、数组指针、函数指针、成员指针、void指针)的介绍,还提到了不同位数机器上指针大小的差异。
54 1
|
2月前
|
存储 编译器 C语言
C++入门2——类与对象1(类的定义和this指针)
C++入门2——类与对象1(类的定义和this指针)
39 2
|
2月前
|
存储 安全 编译器
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值(一)
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值
|
2月前
|
存储 C++ 索引
C++函数指针详解
【10月更文挑战第3天】本文介绍了C++中的函数指针概念、定义与应用。函数指针是一种指向函数的特殊指针,其类型取决于函数的返回值与参数类型。定义函数指针需指定返回类型和参数列表,如 `int (*funcPtr)(int, int);`。通过赋值函数名给指针,即可调用该函数,支持两种调用格式:`(*funcPtr)(参数)` 和 `funcPtr(参数)`。函数指针还可作为参数传递给其他函数,增强程序灵活性。此外,也可创建函数指针数组,存储多个函数指针。
|
2月前
|
算法 C++
【算法】双指针+二分(C/C++
【算法】双指针+二分(C/C++
|
2月前
|
存储 编译器 程序员
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值(二)
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值
|
2月前
|
C语言
无头链表二级指针方式实现(C语言描述)
本文介绍了如何在C语言中使用二级指针实现无头链表,并提供了创建节点、插入、删除、查找、销毁链表等操作的函数实现,以及一个示例程序来演示这些操作。
32 0
|
3月前
|
存储 人工智能 C语言
C语言程序设计核心详解 第八章 指针超详细讲解_指针变量_二维数组指针_指向字符串指针
本文详细讲解了C语言中的指针,包括指针变量的定义与引用、指向数组及字符串的指针变量等。首先介绍了指针变量的基本概念和定义格式,随后通过多个示例展示了如何使用指针变量来操作普通变量、数组和字符串。文章还深入探讨了指向函数的指针变量以及指针数组的概念,并解释了空指针的意义和使用场景。通过丰富的代码示例和图形化展示,帮助读者更好地理解和掌握C语言中的指针知识。
106 4