概述
引用的本质是给已经存在的变量取别名
定义的步骤
int func(int a,int b){
return a + b;
}
void test(){
//1.
int num = 1;
int &b = num;
//2.
int arr[5]={1,2,3,4,5};
int (&myArray)[5] = arr;
//3.
typedef int ArrayType[5];
ArrayType &myArray1 = arr;
//4.
int &element = arr[1];
element = 1000;//1,1000,3,4,5
//5.
int *p = num;
int* &myP = p;
//6.
int (&myFun)(int,int) = func;
}
引用作为函数的形参
引用作为函数的形参,函数内部可以通过形参引用 修改外部变量的值。
void setData01(int a)//int a= data
{
a = 100;
}
void setData02(int *p)//int *p = &data;
{
*p = 100;
}
void setData03(int &b)//int &b=data
{
//函数内部 b是data的别名 操作b等价操作外部的data
b = 100;//data=100
}
void test()
{
int data = 10;
//函数内部不能修改外部变量值
//setData01(data);
//传递变量的地址 函数内部可以修改外部变量的值
//setData02(&data);
setData03(data);
cout<<"data = "<<data<<endl;
}
指针变量和引用作为函数的形参的区别
1、他们的共同点 在函数内部都能修改外部变量的值
2、指针变量:占空间、实参传地址、必须对指针变量取*
3、引用:不占空间、实参传变量、不取*
引用作为函数的返回值类型
链式操作的时候 引用作为函数的返回值类型。
int& getData(void){
static int data = 100;
return data; //返回谁 就是谁的别名 不要返回普通局部变量的引用
}
void test(){
int &ret = getData();
getData() = 1000;
cout<<ret<<endl; //1000
}
struct Print
{
Print& printStr(Print &ob, char *str)
{
cout<<str;
return ob;
}
};
void test()
{
Print ob1; ob1.printStr(ob1,"hehe").printStr(ob1,"xixi").printStr(ob1,"haha").printStr(ob1,"heihei");
}
常引用
//给100去个别名
const int &a = 100;
常引用主要用于函数的形参,函数内部 不能通过常引用修改外部变量的值。
void printData(const int &a)
{
//a=200;//err
cout<<"data="<<a<<endl;
}
void test()
{
int data = 10;
printData(data);
}
引用的本质
应用的本质是常量指针
int data = 10;
int &a = data; /*等价于->*/ int * const a = &data;
a = 20; //data = 20
网友评论