引用:
本质是指针常量 int&p == int *const p
知识点一【引用的用法】
变量名实际上一段连续内存空间的别名,程序可以通过变量可以申请内存地址。c++增加了另一种给函数传递地址的方式,就是传引用,引用可以给另一个变量起别名。
int num =10;
int &a =num; // 引用必须初始化 此时a就是num的别名
int main()
{
int a =10;
int &num = a;
cout<<a<<" "<<num<<endl; //10 10
num =200;
cout<<a<<" "<<num<<endl;// 200 200
}
知识点二【引用在数组中的使用】
1)给数组取个别名:
int main(int argc,char*argv[])
{
int arr[5]={10,20,30,40,50};
int (&xxx)[5]=arr; //给arr取别名为xxx
for(int i=0;i<5;i++)
{
cout<<xxx[i]<<endl;
}
}
2)结合tpyedef
int main(int argc,char*argv[])
{
typedef int xxx[5]; //xxx是一个拥有5个int类型的数组
xxx arr ={10,20,30,40,50}; //我自己方便记忆就是“封装”了一个拥有五个int类型的数组
xxx &yyy =arr;
for (int i =0;i<5;i++)
{
cout<<yyy[i]<<endl;
}
}
知识点三【函数返回值作为引用】
int &fun(void); //声明
int main(int argc,char*argv[])
{
int &res = fun(); //res 是num的别名
cout<<res<<endl;
}
int &fun(void)
{
static int num=10;
return num;//不要返回局部变量,函数结束时会释放,除非用static修饰。
}
知识点四【指针的引用】
#include <iostream>
#include<cstring>>
using namespace std;
void my_str(char*&my_str);
int main()
{
char *str = NULL;
my_str(str);
cout<<"str="<<str<<endl;
free(str);//释放
}
void my_str(char*&my_str) // my_str == str
{
my_str = (char*)calloc(1,32);//申请空间
strcpy(my_str,"Hello");
}
知识点五【常量的引用】
int main()
{
const int &num =10; //在这里面10是const int 类型。
num =20;//err
}