引用(基础)

目录

一、引用的基本概念

二、引用的特点

三、引用的使用

(一)引用作参数

(二)引用作为函数的返回值 

四、常引用

五、引用应用的示例


一、引用的基本概念

  • 引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间 
  • 类型名&引用名=某变量名;
int n=4;
int & r=n;  r引用了n,并且r的类型是int &
 //代码示例: 
#include 
using namespace std;
int main()
{int n=7;int & r=n;r=4;cout<

二、引用的特点

  • 引用在定义时必须初始化
  • 一个变量可以有多个引用
  • 引用一旦引用一个实体,再不能引用其他实体
#include
using namespace std;
int main()
{int a = 1;//int&x;错误写法(对应第一种)//第二点举例:x,y都是变量a的引用int& x = a;int& y = a;cout << &a<< "  " << &x << "  " << &y<

三、引用的使用

(一)引用作参数

void swap(int& a, int& b)
{int tmp;tmp = a; a = b; b = tmp;
}//a引用了n1,b引用了n2,所以a和n1等价,b和n2等价
  •  实质上,相当于将传入的两个实参交换

(二)引用作为函数的返回值 

  • 以引用返回函数值,定义函数时需要在函数名前加&
  • 用引用返回一个函数值的最大好处是,在内存中不产生被返回值的副本
  • 当函数返回一个引用时,则返回一个指向返回值的隐式指针,这样,函数就可以放在赋值语句的左边 
#include
using namespace std;
int Function1()//以返回值的方式返回函数值
{int x = 10;//局部变量x存放在栈区,当函数退出便会释放对应内存return x;
}int& Function2()//以引用方式返回函数值
{int y = 20;//局部变量y存放在栈区,当函数退出便会释放对应内存return y;
}int& Function3()//以引用方式返回函数值
{static int z = 30;//静态变量,存放在全局区,全局区上的数据在程序结束后系统释放return z;
}
int main()
{int a = Function2();//第一种情况,系统生成要返回值的副本(即临时变量)//Function1()的值先存储在一个临时变量中,然后再把临时变量赋值给acout <<"a = " << a << endl;//20,第一次结果正确,是因为编译器做了保留cout <<"a = " << Function2() << endl;// -858993460,第二次错误,是因为y的内存已经释放了//Function1(a) = 20;Function1()的返回值为临时变量,不能赋值(即不能为左值)//函数调用可以作为左值Function3() = 40;//正确cout << Function3() << endl;//40
}

四、常引用

  • 定义引用时,前面加const关键字,即为“常引用” 
#include
using namespace std;
int main()
{//情况1:const int a = 1;const int& x = a;//错误写法:intt&x=a; //情况2:const int& y = 2;//错误写法:int&y=2;return 0;
}

五、引用应用的示例

//方法一错误:
#include 
using namespace std;
void swap(int a, int b)
{int tmp;tmp = a; a = b; b = tmp;
} //a b是形参,n1,n2是实参,形参变化不影响实参 
//同时n1,n2只是把值传给a,b.a,b值发生了互换,但是跟实参n1,n2无影响 
int main()
{int n1 = 1, n2 = 3;swap(n1, n2);cout << n1 << " " << n2;//输出1 3 return 0;
}
//方法二正确:
#include 
using namespace std;
void swap(int* a, int* b)
{int tmp;tmp = *a; *a = *b; *b = tmp;
} //此时int* 是指向n1,n2实参数据存放的地址,然后函数里交换了
//a和b指向的数据 
int main()
{int n1 = 1, n2 = 3;swap(&n1, &n2);cout << n1 << " " << n2;//n1,n2的值被交换 return 0;
}
//方法三正确:
#include 
using namespace std;
void swap(int& a, int& b)
{int tmp;tmp = a; a = b; b = tmp;
}//a引用了n1,b引用了n2,所以a和n1等价,b和n2等价 
int main()
{int n1 = 1, n2 = 3;swap(n1, n2);cout << n1 << " " << n2;//n1,n2的值被交换 return 0;
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章