C++变量的引用

有默认参数的函数
Float area(float r=6.5);
Area()                              //相当于area(6.5);
Area(7.5)                         //形参得到的值是7.5,而不是6.5。
这样做可以简化程序,提高运行效率。
例如:float volume(float h,float r=12.5);
Volume (45.6)                       //程序相当于volume(45.6,12.5);
Volume(34.2,10.4) //程序相当于h=34.2,r=10.4;
注意:实参与形参的结合是从左到右进行的。因此制定默认值的参数必须放在形参表列中的最右端。
例如:
void f1(float a,int b=0,int c,char d='a')//这是不正确的
void f2(float a,int c,int b=0,char d='a')//这才是正确的
如果要调用上面的f2函数,可以采取下面的形式:
f2(3.5,5,3,x)                     //形参的值全部从实参中得到
f2(3.5,5,3)                        //最后一个形参的值取默认值'a';
f2(3.5,5)                           //最后2个形参的值取默认值,b=0,d='a';
在使用带有默认参数的函数时有两点需要注意:
1.如果函数的定义在函数调用之前,则应在函数定义中给出默认值。
2.一个函数不能即作为函数重载,又作为有默认参数的函数。
变量的引用。

引用就是别名。

&是“引用声明符”。

例如:int a; int &b=a//声明b是一个整型变量的引用变量,它被初始化为a。
例如:int a1,a2;
int &b=a1;                          //使b成为变量a1的引用。
int &b=a2;                          //又企图使变量b成为变量a2的引用是不行的。

引用的简单应用:

#include <iostream>

using namespace std;
int main()
{
    int a=10;
    int &b=a;    //声明b是a的引用
    a=a*a;       //a的值变化了,b的值也应该一起变化
    cout<<"a="<<a<<" "<<"b="<<b<<endl;
    b=b/5;       //同理b的值发生了变化,a的值也应一起变化
    cout<<"a="<<a<<" "<<"b="<<b<<endl;
    return 0;
}</strong></span>



输出结果:
a=100 b=100
a=20 b=20。
注意:不要把声明语句“int &b=a”理解为:“将变量a的值赋给引用b”,他的作用是使b成为a的引用,即a的别名。
使用指针实现两个值得互换:

#include <iostream>

using namespace std;
void swap(int *p1,int *p2)
{
    int temp;
    temp=*p1;
    *p1=*p2;
    *p2=temp;
}
int main()
{
    int i=3,j=5;
    swap(i,j);
    cout<<i<<","<<j<<endl;
}

利用“引用实参”实现两个变量的值互换:

#include <iostream>

using namespace std;
void swap(int &a,int &b)
{
    int temp;
    temp=a;
    a=b;
    b=temp;
}
int main()
{
    int i=3,j=5;
    swap(i,j);
    cout<<i<<","<<j<<endl;
}

这两个程序看着差别不大,而且都能出现正确结果。但是在以后的学习中你会发现,指针容易出错,而且不容易调试,需要使用运算符“*”(有时还会使用“->”运算符)去访问有关变量,比较麻烦。

对引用的进一步说明:

1.不能建立void类型的引用,如:

Void &a=9//错误

因为任何实际存在的变量中都是属于非void类型的,void的含义是无类型或者空类型,void只是在语法上相当于一个类型而已。

2.不能建议引用的数组,如:

Char c[6]=hello”;

Char &rc[6]=c;    //错误

因为数组名c只代表数组首元素的地址,本身并不是一个占有存储空间的变量。

3.可以将变量的引用的地址赋给一个指针,此时指针指向的是原来的变量。

Int a=3

Int &b=a

Int *p=&b

相当于p指向变量a,作用相当于:int *p=&a

但是不能写成: int &*p=&a

4.可以建立指针变量的引用,如:

Int i=5

Int  *p=&i

Int *&pt=p

如果输出*pt的值,就是*p的值5

5.可以用const 对引用加以限定,不允许改变该引用的值。如:

int i=5

Const int&a=i;

a=3//企图改变引用a的值,错误

但是它并不阻止改变引用所代表的变量的值,如:

i=3//合法

6.可以用常量或表达式对引用进行初始化,但此时必须用const声明。如:

Int =5

Const &a=i+3//合法

用这种方法不仅可以用表达式对引用进行初始化,还可以用不同类型的变量对之初始化。如:

Double d=3.1415926

Const int&a=d//不会发生编译错误,但是输出a的值是3

如果不加const 则会发生编译错误。

Double d=3.1415926

int&a=d//错误


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值