到目前为止,我们已经了解到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
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)
Tony Bai · Go语言第一课 -〔Tony Bai〕