一、引用的用途
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;
}