C++中的引用
引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。
引用引入了对象的一个同义词。定义引用的表示方法与定义指针相似,只是用&代替了*。引用(reference)是c++对c语言的重要扩充。引用就是某
一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。其格式为:类型 &引用变量名 = 已定义过的变量名。
引用的特点:
①一个变量可取多个别名。
②引用必须初始化,只有别名是不能成立的。
③引用只能在初始化的时候引用一次 ,不能更改为转而引用其他变量。
C++ 引用 vs 指针
引用很容易与指针混淆,它们之间有三个主要的不同:
- 不存在空引用。引用必须连接到一块合法的内存。
- 一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。
- 引用必须在创建时被初始化。指针可以在任何时间被初始化
1、基础数据类型引用:
#include <iostream>
#include <stdio.h>
using namespace std;
int main(void)
{
int a=10;
int &b=a; // 给a起一个别名b
b=20; // 对b操作和对a操作效果是一样的
cout << a <<endl;
a=30;
cout << b << endl;
system("pause");
return 0;
}
运行结果:20 30
2、结构体类型的引用
#include <iostream>
#include <stdio.h>
using namespace std;
typedef struct // 定义一个结构体
{
int x;
int y;
}Coord; // 结构体的名字
int main(void)
{
Coord c;
Coord &c1 = c; // 给c起一个别名c1
c1.x = 10; // 对c1操作相当于对c操作
c1.y = 20;
cout << c.x << "," << c.y << endl;
system("pause");
return 0;
}
运行结果:
3、指针类型的引用:
格式:类型 *&指针引用名 = 指针简而言之:给地址起一个别名
#include <iostream>
#include <stdio.h>
using namespace std;
int main(void)
{
int a = 3;
int *p = &a;
int *&q = p;
cout << p << endl; // P = 0093FC60
cout << &q << endl; // &q = 0093FC54
cout << *&q << endl;//*&q = 0093FC60
*q = 5;
cout << a << endl;
system("pause");
return 0;
}
运行结果:
4、函数参数引用:
以前我们在C语言中交换a,b的位置时:
void fun(int *a,int *b)
{
int c;
c = *a;
*a = *b;
*b = c;
}
调用的时候我们需要吧参数的地址传进去:
int x =10,y = 20;
fun(&x,&y);
而当我们引入了引用,事情就方便多了
void fun(int &a,int &b) // 形参就是引用别名
{
int c = 0;
c = a;
a = b; // a和b都是以别名形式进行交换
b = c;
}
调用传参
int x =10,y = 20;
fun(x,y);
代码示例:
#include <iostream>
#include <stdio.h>
using namespace std;
void fun(int &a,int &b)
int main(void)
{
int x =10;
int y =20;
cout << x << "," << y << endl;
fun(x,y);
cout << x << "," << y << endl;
system("pause");
return 0;
}
void fun(int &a,int &b)
{
int c = 0;
c = a;
a = b;
b = c;
}
输出结果:
原文链接: https://www.cnblogs.com/chuijingjing/p/9009293.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/273540
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!