c++---引用和指標
阿新 • • 發佈:2019-02-18
引用:
引用不是定義一個變數,而是給一個已經定義好的變數重新起一個名字
型別&引用變數名=已定義過的變數名
特點:
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,否則會成為野指標
如果有什麼不對的地方,可以評論告訴我,望指導!