变量的引用

变量的引用,第1张

引用是C++对C的一个重要扩充。

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

 从上面图中就可以看出,b是a的别名,b和a共用同一个空间,并没有为b开辟新的空间。

2、对引用的简单使用:

#include
using namespace std;
int main()
{
	int a = 10;
	int& b = a;
	a = a * a;
	cout << a <<" " << b << endl;
	b = b / 5;
	cout << a <<" " << b << endl;
}

    

 

分析:因为a与b共用同一块内存空间,所以当a变化时b也变化,当b变化时a也变化。

3、对引用的说明:
a、声明引用时必须指定它代表的是哪个变量,即对它初始化。

b、引用与其所代表的变量共享同一内存单元,系统并不为引用另外分配存储单元。

c、当&a前面有类型符如 int &a,它必然是对引用的声明。如果前面没有类型符如p=&a,此时的&时取地址运算符。

d、对引用的初始化可以是一个变量名,也可以是另一个引用。

int main()
{
int a = 3;
int& b = a;
int& c = b;
}

 e、引用在初始化后不能再重新声明为另一个变量的别名。

 4、将引用作为函数的参数:C++之所以增加引用,主要还是利用它作为函数的参数。

在C语言中,函数的参数传递主要是以下面两这种方式:

方式一:将变量名传给形参,传给形参是变量的值。如下边代码:此时的a、b都是作为入参,将a与b相加的结果通过函数的返回值返回。

#include
int Add(int a, int b)
{
	return a + b;
}
int main()
{
	int a = 10;
	int b = 20;
	int res = Add(a, b);
	printf("%d\n", res);
}

方式二: 不通过函数的返回值返回,通过函数的参数返回,此时参数就要用指针的方式对其结果返回,这个参数就是出参。如下面代码:

#include
void Add(int a, int b,int *returnRes)
{
	 *returnRes=a + b;
}
int main()
{
	int a = 10;
	int b = 20;
	int res;
	Add(a, b, &res);
	printf("%d\n", res);
}

在第一种方式中我们通过返回a+b的结果给到res 因此我们会开辟一个无名的临时空间给res;

第二种方法中我们要给指针开辟空间,存放res的地址。这两种方式都要开辟一定的空间,程序效率不高,所以在C++中我们更倾向于用引用作为函数的参数。

#include
using namespace std;
void Add(int a, int b,int &returnRes)
{
	 returnRes=a + b;
}
int main()
{
	int a = 10;
	int b = 20;
	int res;
	Add(a, b, res);
	printf("%d\n", res);
}

在上面这个代码中是将引用作为函数的参数,returnRes时res的别名,没有为returnRes开辟新的空间,因此对returnRes进行 *** 作就是对res直接 *** 作,提高程序的效率。

5、对于引用的进一步说明:

a、不能建立void类型的引用。

void &a=9         //错误

b、不能建立引用的数组。

char a[2]={1,2};
char &b[2]=a      //错误

数组名a只能能代表数组首元素的地址,本身并不是一个占有存储空间的值。 

c、可以将变量引用的地址赋给一个指针,此时指针指向原来的变量。

int a=3;
int &b=a;
int *p=&b;//指针p指向变量a的引用b,相当于指向变量a

d、可以建立指针变量的引用。

 

int a=3;
int *p=&a;
int * &pt=p;//pt 是 p的别名,pt指向a

e、可以用const 对引用加一限定,不允许改变该引用的值。也称为常引用。

int a=3;
const int &b=a;//不允许改变该引用的值

 此时如果你想改变a的值就是错误的。常引用通常用作为函数的形参,因为有时希望保护形参的值不被改变。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/3002606.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-09-27
下一篇 2022-09-27

发表评论

登录后才能评论

评论列表(0条)

保存