函数
- 内联函数
- 重载函数
- 默认
- 递归函数
引用的概念
- 引用的定义和初始化
- 引用是个别名
- 引用的初始化
- 引用作为目标的别名而使用,对引用的改动实际就是对目标的改动。
- 为了建立引用,先写上目标的类型,再加上引用运算符”&”,然后是引用的名字。
- 引用能引用任何合法变量名
引用的初始化
#include<stdio.h>
#include<iostream>
using namespace std;
int main()
{
int intone=5;
int& rint=intone;
cout<<"intone = "<<intone<<endl;
cout<<"rint = "<<rint<<endl;
}
//结果为:intone=5;
//rint=5;
- 它们占用同一块内存
#include<stdio.h>
#include<iostream>
using namespace std;
int main()
{
int intone=5;
int& rint=intone;
cout<<"intone = "<<intone<<endl;
cout<<"rint = "<<rint<<endl;
rint=10;
cout<<"intone = "<<intone<<endl;
cout<<"rint = "<<rint<<endl;
cout<<"&intone = "<<&intone<<endl;
cout<<"&rint = "<<&rint<<endl;
}
//结果为: 5,5,10,10
#include<stdio.h>
#include<iostream>
using namespace std;
int main()
{
int intone=5;
int& rint=intone;
int inttwo=6;
rint=inttwo;
cout<<"intone = "<<intone<<endl;
cout<<"rint = "<<rint<<endl;
cout<<"inttwo = "<<intone<<endl;
cout<<"&intone = "<<&intone<<endl;
cout<<"&rint = "<<&rint<<endl;
cout<<"&inttwo = "<<&inttwo<<endl;
}
//结果为:6,6,6,f0,f0,f4;
操作引用
- &只有在声明引用时是引用操作符,其他时候都是地址操作符
引用的条件
- 若一个变量声明为T&,即引用时,它必须用T类型的变量或对象,或能够转换成T类型的对象进行初始化。
const double& rr=1;
- 首先作必要的类型转换;
- 然后将结果置于临时变量;
- 最后,把临时变量的地址作为初始化的值
- 由于指针也是变量,所以可以有指针变量的引用
int*a:
int*&P=a://表示int*的引用P初始化为a
int b=8;
P=&b://0k,P是a的别名,是一个指针
- 什么不能引用
- 对void进行引用是不允许的。
例如:void&a=3; //error
- 不能建立引用的数组
例如:int a[10];
int& ra[10]=a; //error
int a;
int& ra=a;
int& *p=&ra; //error企图定义一个引用的指针
int& ri=NULL; //毫无意义
nt& ra=int; //error初始化时用数据类型初始化了
用引用传递函数参数(传值,传地址)
- 引用作为形参
(传地址)
#include<stdio.h>
#include<iostream>
using namespace std;
void jxbswap(int &a,int &b)//int *a,int *b;两个*号同除以&则变为&
{
int temp;
temp=a;
a=b;
b=temp;
}
int main()
{
int x=10,y=20;
jxbswap(x,y);//原为&x,&y;同除以&,则为x,y;
cout<<"x = "<<x<<endl;
cout<<"y = "<<y<<endl;
}
- 引用作为返回值
- 是有问题的
#include<stdio.h>
#include<iostream>
using namespace std;
int *swap()
{
int temp=12;
return &temp;//temp空间释放
}
int main()
{
int *x=swap();//*x成为野指针
cout<<"*x = "<<*x<<endl;
}
- 利用引用,则不会有错
include<stdio.h>
#include<iostream>
using namespace std;
int &swap()
{
int temp=12;
return temp;//temp空间释放
}
int main()
{
int &x=swap();//*x成为野指针
cout<<"x = "<<x<<endl;
}
//结果为:12;
- 使用引用作为参数和返回值给函数的意义
- 函数只能返回一个值。如果程序需要从函数返回两个值怎么办
- 解决这一问题的办法之一是用引用给函数传递两个参数,然后由函数往目标中填入正确的值
- 函数返回值时,要生成一个值的副本。而用引用返回值时,不生成值的副本,所以提高了效率