C++ 引用

C++ 引用 首页 / C++入门教程 / C++ 引用

到目前为止,我们已经了解到C++支持两种类型的变量:

  • 普通变量是包含某种类型的值的变量。例如,我们创建了一个int类型的变量,这意味着该变量可以保存整数类型的值。
  • 指针是一个变量,用于存储另一个变量的地址。可以取消引用以检索此指针指向的值。
  • C++支持另一个变量,即引用。它是一个变量,充当另一个变量的别名。

创建引用

引用可以通过简单地使用&运算符来创建。当我们创建一个变量时,它会占用一些内存位置。我们可以创建变量的引用;因此,我们可以使用变量名或引用访问原始变量。例如,

int a=10;

现在,我们创建上述变量的引用变量。

链接:https://www.learnfk.comhttps://www.learnfk.com/c++/cpp-references.html

来源:LearnFk无涯教程网

int &ref=a;

上面的语句意味着'ref'是'a'的引用变量,即我们可以使用'ref'变量代替'a'变量。

引用类型

  • 非常量引用
  • 别名引用

对非常量值的引用

可以通过对引用类型变量使用&运算符来声明它。

#include <iostream>
using namespace std;
int main()
{
  int a=10;
  int &value=a;
  std::cout << value << std::endl;
  return 0;
}

输出

 10 

对别名的引用

作为别名引用是被引用变量的另一个名称。例如,

int a=10;  //'a' 是一个变量。
int &b=a;//'b' 引用 a。
int &c=a;//'c' 引用 a。

让我们看一个简单的例子。

#include <iostream>
using namespace std;
int main()
{
  int a=70;//变量初始化
  int &b=a;
  int &c=a;
  std::cout << "Value of a is :" <<a<< std::endl;
  std::cout << "Value of b is :" <<b<< std::endl;
  std::cout << "Value of c is :" <<c<< std::endl;
  return 0;}

在上面的代码中,我们创建了一个包含值" 70"的变量" a"。我们已经声明了两个引用变量,即b和c,并且都引用相同的变量'a'。因此,我们可以说'a'变量可以由'b'和'c'变量访问。

输出

Value of a is :70 
Value of b is :70 
Value of c is :70 

引用属性

以下是引用的属性:

初始化   -  必须在声明时将其初始化。

#include <iostream>
using namespace std;
int main()
{
  int a=10;//变量初始化
  int &b=a;//b 参考 a
  std::cout << "value of a is " <<b<< std::endl;
  return 0;
}

在上面的代码中,我们创建了一个引用变量,即" b"。在声明时,将" a"变量分配给" b"。如果我们在声明时未分配,则代码如下:

上面的代码将引发编译时错误,因为在声明时未分配" a"。

输出

 value of a is 10 

重新分配    -  不能重新分配它意味着不能修改引用变量。

#include <iostream>
using namespace std;
int main()
{
  int x=11;//变量初始化
  int z=67;
  int &y=x;//y 对 x 的引用
  int &y=z;//y 对 z 的引用,但会引发编译时错误。
  return 0;}

在上面的代码中," y"引用变量指的是" x"变量,然后将" z"分配给" y"。但是,使用引用变量无法进行这种重新分配,因此会引发编译时错误。

main.cpp: In function 'int main()':
main.cpp:18:9: error: redeclaration of 'int& y'
int &y=z;//y 对 z 的引用,但会引发编译时错误。
^
main.cpp:17:9: note: 'int& y' previously declared here
int &y=x;//y 对 x 的引用
^

函数参数   -  引用也可以作为函数参数传递。它不会创建参数副本,并且充当参数的别名。由于不创建参数副本,因此可以提高性能。

通过一个简单的例子让我们理解。

#include <iostream>
using namespace std;
int main()
{
  int a=9;//变量初始化
  int b=10;//变量初始化
  swap(a, b);//函数调用
  std::cout << "value of a is :" <<a<< std::endl;
  std::cout << "value of b is :" <<b<< std::endl;
  return 0;
}
void swap(int &p, int &q)//函数定义
{
  int temp;//变量声明
  temp=p;
  p=q;
  q=temp;
}

在上面的代码中,我们交换了'a'和'b'的值。我们已经将变量" a"和" b"传递给了swap()函数。在swap()函数中," p"指的是" a",而" q"指的是" b"。当我们交换'p'和'q'的值时,意味着'a'和'b'的值也被交换。

输出

value of a is :10 
value of b is :9 

嵌套引用  -  借助引用,我们可以轻松访问嵌套数据。

#include <iostream>
using namespace std;
struct profile
{
  int id;
};
struct employee
{
  profile p;
};
int main()
{
  employee e;
  int &ref=e.p.id;
  ref=34;
  std::cout << e.p.id << std::endl;
}

在上面的代码中,我们试图访问员工个人资料结构的" id"。我们通常使用语句e.p.id来访问该成员,但是如果我们对该成员具有多个访问权,这将是一个繁琐的任务。为了避免这种情况,我们创建了一个引用变量,即ref,它是" e.p.id"的另一个名称。

输出

 34 

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

从0开始学微服务 -〔胡忠想〕

数据结构与算法之美 -〔王争〕

研发效率破局之道 -〔葛俊〕

深入浅出云计算 -〔何恺铎〕

罗剑锋的C++实战笔记 -〔罗剑锋〕

技术管理案例课 -〔许健〕

Tony Bai · Go语言第一课 -〔Tony Bai〕

朱涛 · Kotlin编程第一课 -〔朱涛〕

手把手带你搭建推荐系统 -〔黄鸿波〕

好记忆不如烂笔头。留下您的足迹吧 :)