指针&引用&const

来源:互联网 发布:淘宝无线首页模板 编辑:程序博客网 时间:2024/06/01 10:35

//`引用

#include<iostream>

using namespace std;

void test1()
{
int a;
int &b=a;
cout<<"a:address->"<<&a<<endl;

cout<<"b:address->"<<&b<<endl;

a=2;
b=3;
int &c=b;
c=4;
cout<<a<<endl;//4

}
int main()
{
test1();
return 0;

}

引用:引用不是定义一个新的变量,而是给一个已定义的变量重新起一个别名。

定义的格式为:类型&引用变量名 = 已定义过的变量名。


引用的特点:

(1)一个变量可以取多个别名;

(2)因引用必须初始化。

(3)引用只能在初始化的时候饮用一次,不能改变为再引用其他的变量。


//const 引用
#include<iostream>
using namespace std;


void test2()
{
int d1=4;
const int &d2 = d1;
d1=3; //d1改变d2也改变
//d2=5; //不能给常量赋值


const int d3 = 1;
const int &d4=d3;
const int &d6 = 5;//常量具有常性,只有常引用可以引用常量

double d7 = 1.1;
//int &d8 = d7; //d7是double类型,d8是int,d7赋值给d8时会产生一个临时变量
//也就是说d8引用的是这个具有常性的临时变量,所以不能赋值。
const int& d9 = d7;


}


int main()
{
test2();
return 0;
}


//引用做返回值和引用传参
#include <iostream>
using namespace std;


int& Add(int& x,int& y)
{
int ret = 0;
ret = x+y;
return ret;
}
int main()
{
int a = 10;
int b = 20;
int ret  = 0;
ret = Add(a,b);
cout<<ret<<endl;
return 0;
}

//引用传参
#include <iostream>
using namespace std;

void Swap(int& x,int& y)
{
int tmp = x;
x=y;
y=tmp;
}
int main()
{
int a = 10;
int b = 20;
cout<<a<<"   "<<b<<endl;//10   20
Swap(a,b);
cout<<a<<"   "<<b<<endl;// 20  10
return 0;
}

结论:

(1)不要返回一个临时对象的引用。

(2)如果返回对象出了当前函数的作用域依旧存在,则最好使用引用返回,这样更高效。



//引用和指针的区别和联系

(1)引用只能在定义时初始化一次,之后不能改变指向其他变量;指针变量的值可变。

(2)引用必须指向有效的变量,指针可以为空。

(3)sizeof指针对象和引用对象的意义不一样,sizeof引用得到的是所指向的变量的大小,而sizeof指着是对象地址的大小。

(4)指针和引用的自增自减的意义不一样。

(5)相对而言,引用比指针更安全。

总结:

指针比引用更灵活,但是也更危险,使用指针时一定要注意检查指针是否为虑。指针所指的地址释放后最好置为0;否则可能存在野指针。


原创粉丝点击