天天看點

C++中的引用,基本文法,注意事項,引用做函數參數,引用做函數傳回值,引用的本質,常量引用

基本文法

作用 : 給變量起别名

文法:資料類型 &别名=原名

int a=10;
int &b=a;
b=20;
cout<<a<<endl;
           
C++中的引用,基本文法,注意事項,引用做函數參數,引用做函數傳回值,引用的本質,常量引用

改b,也相當于a,a,b一起綁定了

看到這個代碼的時候的深層了解

把它看成記憶體

C++中的引用,基本文法,注意事項,引用做函數參數,引用做函數傳回值,引用的本質,常量引用

可不可以讓b也代表這塊記憶體,就起個别名。

在C語言中可以用malloc

注意事項

int a=10;
int &b=a;
           

1.引用必須要初始化,要指派

2.引用一旦初始化後不可以更改

假如說又有一個變量

一旦b成為了a的别名,就不能再用c的别名了

引用做函數參數

作用:函數傳參時,可以利用引用的技術讓形參修飾實參

有點:可以簡化指針修改實參

#include<iostream>
using namespace std;
//交換函數
//值傳遞
void swap1(int a,int b){
	int t=a;
	a=b;
	b=t;	
} 
//位址傳遞
void swap2(int *a,int *b){
	int t=*a;
	*a=*b;
	*b=t;
} 
//引用傳遞
void swap3(int &a,int &b){//括号裡的是起的别名,因為形參,和原來變量一樣的别名也可以 
	int t=a;//這個t就是個int型局部變量。
	a=b;
	b=t;
	
} 
//引用與位址傳遞比較起來更簡便一點 
int main(){

int a=10;
int b=20;

swap3(a,b);
cout<<a<<endl;
cout<<b<<endl;

    return 0;
}


           
C++中的引用,基本文法,注意事項,引用做函數參數,引用做函數傳回值,引用的本質,常量引用

引用做函數傳回值

作用

注意:

1.不要傳回局部變量的引用 因為局部變量會被編譯器釋放

#include<iostream>
using namespace std;

int & test(){
	int a=10;//局部變量存放再四區中的棧區 
	return a;	
} 

int main(){

int &r=test();
cout<<r<<endl;
cout<<r<<endl;

    return 0;
}


           
C++中的引用,基本文法,注意事項,引用做函數參數,引用做函數傳回值,引用的本質,常量引用

這點性質還是棧區的局部變量的性質

2.函數的調用可以作為左值

#include<iostream>
using namespace std;

int & test(){
static int a=10;//靜态變量存放在全局區 ,整個程式執行完才會被釋放 
	return a;	
} 

int main(){

int &r=test();
cout<<r<<endl;
cout<<r<<endl;
test()=1000;// 因為這個函數傳回的是a 
cout<<r<<endl;
cout<<r<<endl; 

    return 0;
}


           
C++中的引用,基本文法,注意事項,引用做函數參數,引用做函數傳回值,引用的本質,常量引用

引用的本質

本質:引用的本質在C++内部實作是一個指針常量

#include<iostream>
using namespace std;
//發現是引用,轉換為int*const ref=&a;
//是以指針的本質就是一個指針常量
//引用一旦初始化後,就不可以發生改變
//但可以改變變量的值 
int fun(int &ref ){
ref =100;
	return ref;	// ref是引用,轉換為*ref=100 
} 

int main(){
	int a=10;
	//自動轉換位int*const ref =&a;
	//指針常量是指針指向不可改,也就說明了為什麼引用不能更改 
int &ref=a;
ref=20;//内部發現ref是引用,自動幫我們轉換為*ref=20 ;
cout<<a<<endl;
cout<<ref<<endl;

return 0;
}


           

所有指針的操作編譯器都幫我們做了

常量引用

作用: 常量引用主要用來修飾形參,防止誤操作

在函數形參清單中,可以加const修飾形參,防止形參改變實參。

不用const的例子:

#include<iostream>
using namespace std;

void fun(int &ref ){
	 ref=100;
cout<<ref <<endl; 
} 

int main(){
int a=10;
//int &ref=a;
//int &ref=10;這個不對,引用必須引用一塊合法的記憶體空間 
//加上const之後 編譯器将代碼修改 int temp=10; const int &ref =t; 
const int &ref=10;
//ref=20;錯誤,加入const之後隻讀,不可修改 
fun(a);
cout<<a<<endl; 

return 0;
}


           
C++中的引用,基本文法,注意事項,引用做函數參數,引用做函數傳回值,引用的本質,常量引用

可見誤操作,改變了a的值

為了防止誤操作

void fun(const int &ref ){
	// ref=100;這行會報錯。
cout<<ref <<endl; 
} 
           
c++

繼續閱讀