引用

一、引用的用途

1、變量的引用是變量的別名,與變量佔用同一段內存空間,引用在定義時需要初始化,不能爲空。

在函數內部使用

#include <iostream>
#include <stdlib.h>
using namespace std;

int main()
{
	int a = 5;
	int &ra(a);
	ra = 3;
	cout << a <<endl;
	return 0;
}

輸出3,ra 和 a是一個東西。

2、引用作爲參數傳遞

#include <iostream>
#include <stdlib.h>
using namespace std;
void change(int &a)//新建一個變量接收實參
{
	a = 19;
}
int main()
{
	int a = 5;
	change(a);
	cout << a <<endl;//19
	return 0;
}
3、引用作爲返回值
#include <iostream>
#include <stdlib.h>
using namespace std;
int &get()
{
	int a = 10;//棧
	int &ra = a;
	return ra;
	
}
int main()
{
	int &ra = get();
	cout<<ra<<endl;//10
	cout<<ra<<endl;//1529137864,不能返回棧上的東西,但可以返回棧上指向的值

	return 0;
}
二、引用與指針

1、通過引用改變指針的指向

#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
	int num1(5),num2(10);
	int *pnum(&num1);
	cout<<*pnum<<endl;//5,指向num1的指針
	int *&rpnum = pnum;//*&順序不能變
	rpnum = &num2;
	cout<<*pnum<<endl;//10 指向num2的指針
	return 0;
}

2、引用改變指針指向的值
#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
	int num1(5),num2(10);
	int *pnum(&num1);
	cout<<*pnum<<endl;//5
	int *&rpnum = pnum;
	*rpnum = 100;
	cout<<*pnum<<endl;//100
	return 0;
}

三、高級引用

1、引用一維數組

#include <iostream>
#include <stdlib.h>

using namespace std;

int main()
{
	int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
	int (&ra)[10](a);
	for(int i = 0; i < 10; i++)
	{
		cout<< ra[i] <<endl;
	}
	return 0;
}
2、二維數組的引用

#include <iostream>
#include <stdlib.h>

using namespace std;

int main()
{
	int a[2][5] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
	int (&ra)[2][5](a);//二維數組的引用
	for(int i = 0; i < 2; i++)
	{
		for(int j = 0; j < 5; j++)
		{
			cout<<" "<<ra[i][j];
		}
		cout<<endl;
	}
	return 0;
}

3、引用函數指針

#include <iostream>
#include <stdlib.h>

using namespace std;

int jia(int a, int b)
{
	return a+b;
}
int jian(int a, int b)
{
	return a-b;
}

int main()
{
	int (*p)(int a, int b)(jia);//定義一個函數指針
	cout<<p(1,2)<<endl;//3
	int (*&rp)(int a, int b)(p);//定義一個函數指針的引用
	rp = jian;//此處不能用括號,括號僅適用於初始化
	cout<<p(1,2)<<endl;//-1
	return 0;
}

4、函數指針當做函數的參數

#include <iostream>
#include <stdlib.h>

using namespace std;

int jia(int a, int b)
{
	return a+b;
}
int jian(int a, int b)
{
	return a-b;
}
void change(int (*&rp)(int, int))//函數指針當做函數的參數
{
	rp = jian;
}
int main()
{
	int (*p)(int a, int b)(jia);//定義一個函數指針
	cout<<p(1,2)<<endl;//3
	change(p);
	cout<<p(1,2)<<endl;//-1
	return 0;
}
5、右值引用作用:節約拷貝內存的時間,是內存優化所必須的。

6、常量的引用

#include <iostream>
#include <stdlib.h>

using namespace std;

int main()
{
	char str[10]("hello");
	const char(&rstr)[10](str);
	str[2] = 'y';//可以
	//rstr[2] = 'y';//不可以,相當於指向常量的指針,只能讀,不能寫
	const char(&rrstr)[10](rstr);//可以,引用可以給另一個引用初始化
	return 0;
}

7、限定一個函數指針是常引用

#include <iostream>
#include <stdlib.h>

using namespace std;

int jia(int a, int b)
{
	return a+b;
}
int jian(int a, int b)
{
	return a-b;
}

int main()
{
	int (*p)(int a, int b)(jia);//定義一個函數指針
	cout<<p(1,2)<<endl;//3
	int (*const &rp)(int a, int b)(p);//注意const的位置
	//rp = jian;//不可以
	
	return 0;
}


發佈了58 篇原創文章 · 獲贊 21 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章