C++基础
引用和函数的高级算法
课程目标
- 引用的优点和使用方法
- 引用函数,内联函数,默认参数函数,递归函数。
引用
- 引用一定要初始化,他就维系在一定的目标上,再也不分开。
#include <iostream>
int main(int argc,char *argv[])
{
int intone=5;
int &rint=intone;
int inttwo=6;
rin t=inttwo;
std::cout<<"intone="<<intone<<std::endl;
std::cout<<"rint="<<rint<<std::endl;
rint=10;
std::cout<<"intone="<<intone<<std::endl;
std::cout<<"rint="<<rint<<std::endl;
std::cout<<"&intone="<<&intone<<std::endl;
std::cout<<"&rint="<<&rint<<std::endl;
}
- 引用的别名和初始化
- 引用是个别名
- 引用的初始化
- 引用作为目标的别名而使用,对引用的改动实际就是对目标的改动。
- 为了建立引用,先写上目标的类型,再加上引用运算符”&”,然后是引用的名字。
- 引用能引用任何合法变量名
int*a:
int*&P=a://表示int*的引用P初始化为a
int b=8;
P=&b://0k,P是a的别名,是一个指针
- 引用与指针有很大差别:
- &只有在声明引用时是引用操作符,其他时候都是地址操作符
- C++没有提供访问地址的办法。
- 若一个变量声明为T&,即引用时要用T的变量或对象,或能够转成T类型对象进行初始化。
const double&rr=1;
- 先做必要的类型转换
- 将结果至于临时变量
- 将临时变量的地址作为初始的值
- 不能进行引用
void &a=3
int a[10];
int &ra[10]=a;
int a;
int& ra=a;
int& *p=&ra; //error企图定义一个引用的指针
int &ri=NULL;
int &ri=int;
- 函数的指针与引用
#include <iostream>
using namespace std;
void swap(int &a,int &b)
{
int temp;
temp=a;
a=b;
b=temp;
}
int main()
{
int x=10,y=20;
swap(x,y);
cout<<"x="<<x<<endl;
cout<<"y="<<y<<endl;
}
- 如果把引用作为返回值,他也不能把局部变量的地址返回出来
#include <iostream>
int &test()
{
int temp=12;
return temp;
}
int main()
{
int &x=test();
std::cout<<"x="<<x<<std::endl;
}
- temp的生命周期仅局限于&test函数的},结果会被释放。
- 函数会报警告,但是最后的结果也可以显示12,因为系统内部产生一个临时变量,存储temp值。
- 用static int temp就不会出现警告。
int a=5,b=6;
swap(a,b);//会不清楚到底是引用还是传参。
- 使用引用作为参数和返回值给函数的意义
- 函数只能返回一个值,
- 解决问题的方法是传递两个参数。
#include<iostream>
using namespace std;
double& fn(const double& pd) //const作为参数
{
static double ad=3;
ad+=pd;
cout<<"fn being called..the value is:"<<pd<<endl;
return ad;
}
int main()
{
double a=3.6;
double& pa=fn(a);
cout <<pa <<endl;
a=5.4;
pa = fn(a);
cout <<pa <<endl;
return 0;
}
//6.6 12
- 引用总结:
- 引用可以提高程序的可读性
- 在大对象时,引用可以提高效率
- 引用可以变相增加函数的返回值
- 数组不可以引用
- 避免返回局部变量的引用
- 可以返回结构的引用
网友评论