1. 程式人生 > 其它 >c++引用小結

c++引用小結

技術標籤:c++

在c++中引用方式為:

int &c = a; 

引用的本質為

int * const c=a;

因此c本質是個指標常量,且其指標指向不可變。因此在有些需要傳遞某種資料型別的指標時,可以用引用的方式傳遞。
引用的第二種方式,就是系統會自動對引用變數進行解引用取值操作;例如:

int &c = a;
c = 100;//*c = 100

int &c = a;本質像我前面說的,是將a的地址傳遞給c,c本質為指標常量。
c = 100;這句話如果將c看作指標常量來說,是錯誤的,此時系統會自動認為*c=100;因此此時可以將c看作a的一個別名。
綜上所述,引用既可以看作變數的地址傳遞,也可以看作變數的引用傳遞,即為物件取別名

區域性變數的引用不可作為函式返回值

//返回區域性變數引用
int& test01() {
	int a = 10; //區域性變數
	return a;
}
int main() {

	//不能返回區域性變數的引用
	int& ref = test01();
	cout << "ref = " << ref << endl;
	cout << "ref = " << ref << endl;
	system("pause");
	return 0;
	}

其原因是因為區域性變數存放在棧區,當函式呼叫完成之後,區域性變數記憶體空間被釋放,此時如果呼叫其引用,會產生記憶體錯誤。

當以引用(靜態變數/全域性變數)作為函式返回值時,函式呼叫可作為左值

//返回靜態變數引用
int& test02() {
	static int a = 20;//靜態變數存放於全域性區,是程式結束後才會釋放
	return a;
}
int main() {
	//如果函式做左值,那麼必須返回引用
	int& ref2 = test02();
	cout << "ref2 = " << ref2 << endl;
	cout << "ref2 = " << ref2 << endl;
test02() = 1000; cout << "ref2 = " << ref2 << endl; cout << "ref2 = " << ref2 << endl; system("pause"); return 0; }

上述輸出結果如下:
在這裡插入圖片描述