六:函数返回值是一个引用



#include<iostream>
using namespace std;
/************************************************************************
    返回值是基础类型,当引用                                                                   
	当函数返回值为引用时
	若返回栈变量
	不能成为其它引用的初始值
	不能作为左值使用
************************************************************************/
int getAA1()
{
	int a;
	a = 10;
	return a;
}
//返回a的本身返回a的一个副本
int& getAA2()
{
	int a;//如果返回栈上的引用会有问题
	a = 10;
	return a;
}

int* getAA3()
{
	int a;
	a = 10;
	return &a;
}

int main()
{
	int a1 = 0;
	int a2 = 0;
	a1 = getAA1();

	a2 = getAA2();//如果使用int型的变量接这个返回值,把这个值10赋给a2,返回一个a的副本
	int  &a3 = getAA2();
	//*a3  若返回栈变量	不能成为其它引用的初始值

	printf("a1:%d,a2:%d,a3:%d",a1,a2,a3);
	
	system("pause");
	return 0;
}



若返回静态变量或全局变量

       可以成为其他引用的初始值

       即可作为右值使用,也可作为左值使用


#include<iostream>
using namespace std;
//若返回静态变量或全局变量
//	可以成为其他引用的初始值
//	即可作为右值使用,也可作为左值使用




int j1()
{
	static int a = 10;
	a ++ ;
	return a;


}
int& j2()
{
	static int a = 10;
	a ++ ;
	return a;


}


int main()
{
	int a1 = 10;
	int a2 = 20;
	a1 = j1();
	a2 = j2();
	int &a3 = j2();
	printf("a1:%d,a2:%d,a3:%d",a1,a2,a3);
	system("pause");
	return 0;
}


函数当左值


#include<iostream>
using namespace std;
/************************************************************************/
/* 函数当左值                                                                   */
/************************************************************************/
int g1()
{
	static int a = 10;
	a++;
	return a;//返回一个值11
}

int& g2()
{
	static int a = 10;
	a++;
	printf("a:%d\n",a);
	return a;//返回变量自身A ,返回变量所表示的内存空间
}

int main()
{
	//g1() = 100;//报错    左操作数必须为左值相当于  11  = 100;
	g2() = 100;//相当于A = 100;函数返回值是一个引用并且当作值
	g2();
	//printf("a1:%d,a2:%d,a3:%d",a1,a2,a3);
	int c = g2();//当做右值
	system("pause");
	return 0;
}



发布了33 篇原创文章 · 获赞 2 · 访问量 8542

猜你喜欢

转载自blog.csdn.net/QQ960054653/article/details/54767493
今日推荐