更多点子:c++—目录索引(知识小渠道)
引用:
引用不是定义一个变量,而是给一个已经定义好的变量重新起一个名字
类型&引用变量名=已定义过的变量名
特点:
1 一个变量可以取多个别名
2 引用必须初始化
3 引用只能在初始化的时候引用一次,不能改变为引用其他的变量
void Test1()
{
int a = 1;
int& b = a;
cout<<"a:"<<&a<<endl;
cout<<"b:"<<&b<<endl;
a=2;
b=3;
cout<<"a "<<a<<endl;// 3
int& c = b;
c=4;
cout<<"c "<<c<<endl;// 4 引用一个引用变量,别名的别名
}
const 引用
const的不能给非const,就是说权限只能被缩小不能被放大,可读可写的只能给可读的
不同类型之间不能直接引用,必须加上const,而且还有可能读的时候丢精度
void Test2()
{
int a=1;
const int& b=a;
a =2;//a变b也会跟着变
//b=3;//b是const常亮,这就不可以赋值
const int c=1;
const int& d=c;
// const int& e=c;//const相当于常量,常量具有常性,只有常引用可以引用常量
double f=1.2;
//int& g=f;//f是double,g是int,如果引用的话,引用改变,原值岂不是很尴尬
const int& h=f;
}
引用做参数
1.【值传递】形参生成局部变量接受实参的值
void Swap(int a,int b)
{
int tmp=a;
a=b;
b=tmp;
}
2.【指针传递】
void Swap(int* a,int* b)
{
int tmp=*a;
*a=*b;
*b=tmp;
}
3.【引用传递】形参为引用类型,形参是实参的别名
void Swap(int& a,int& b)
{
int tmp=a;
a=b;
b=tmp;
}
void Test3()
{
int i =1;
int j=2;
cout<<"a "<<a<<endl;
cout<<"b "<<b<<endl;
Swap(a,b);
cout<<"a "<<a<<endl;
cout<<"b "<<b<<endl;
}
如果不希望在函数体内改变参数的值,可以使用常引用传参(const)
void func(const int& a);
传值做返回值,传引用作为返回值
int& Add(int a,int b)
{
int sum=a+b;
return sum;
}
int& ret =Add(1,2);
不要返回一个临时变量的引用,除了函数啥都不是啊
如果返回对象出了当前函数作用域依旧存在,那最好使用引用返回,更高效
引用其实是用指针实现的,存地址这样的方式实现的
引用和指针
1. 引用只能在定义时初始化一次,之后不能改变指向其他变量;指针变量的值可变
2. 引用必须指向有效的值;指针可以指空
3. sizeof指针和引用的意义不一样,sizeof引用得到所指向变量的大小;sizeof指针得到对象地址的大小
4. 指针 引用自增自减意义不一样
5. 引用比指针更安全,指针比引用灵活,也危险,指针所指地方释放之后最后置NULL,否则会成为野指针
如果有什么不对的地方,可以评论告诉我,望指导!