一.为什么C++要使用引用。
在C语言中函数传参有俩中方式(传值和传址),在函数调用过程中会生成临时变量用形参代替,最终把实参传递给形参。优点:避免了函数调用的副作用,但无法改变形参的值。
void swap(int right ,int left)
{
int temp = right; //形参不可改变,
right = left;
left = temp;
}
要改变形参的值只能使用指针
void swap (int *_pleft , int * _pRight)
{
assert (NULL != _pleft && NULL != _pRight);
int iTemp = * _pleft;
*_pleft = * _pRight;
*_pRight = iTemp;
}
但指针不安全因此C++中使用引用。
二.引用
引用:即给已存在变量另取一个别名(类似于人的外号,但人还是这个人),即引用和该变量使用同一块内存空间
类型 &变量(对象名) = 引用变量名 (引用的类型和变量的类型必须是同一种类型)
void TestRef()
{
int iNum0 = 10;
int &iNum1 = iNum0;
int &iNum2 = iNum1;
// int &iNum3; // 定义引用时必须进行初始化
int &iNum6 = iNum0; //一个变量可以有多个引用
int iNum7 = 20;
// &iNum6 = iNum7; // 引用一旦定义,就不能够在改变
}
三.引用和指针的区别
1、引用在定义时必须初始化,指针没有要求。// int &iNum1=iNum0;
2、一旦一个引用被初始化为指向一个对象,就不能再指向其他对象,而指针可以在任何时候指向任何一个同类型对象 //int &iNum2 = iNum1; 即&iNum2不能指向其他对象
3、没有NULL引用,但有NULL指针。
4、在sizeof中含义不同:引用结果为引用类型的大小(int 、double、 char、、、、、 ),但指针始终是地址空间所占字节个数。
5、引用自加改变变量的内容(引用改变的是变量的值),指针自加改变了指针指向(指针改变的是变量的地址)
6、有多级指针,但是没有多级引用(引用只能指向一个对象)
7、引用比指针使用起来相对更安全
在C语言中函数传参有俩中方式(传值和传址),在函数调用过程中会生成临时变量用形参代替,最终把实参传递给形参。优点:避免了函数调用的副作用,但无法改变形参的值。
void swap(int right ,int left)
{
int temp = right; //形参不可改变,
right = left;
left = temp;
}
要改变形参的值只能使用指针
void swap (int *_pleft , int * _pRight)
{
assert (NULL != _pleft && NULL != _pRight);
int iTemp = * _pleft;
*_pleft = * _pRight;
*_pRight = iTemp;
}
但指针不安全因此C++中使用引用。
二.引用
引用:即给已存在变量另取一个别名(类似于人的外号,但人还是这个人),即引用和该变量使用同一块内存空间
类型 &变量(对象名) = 引用变量名 (引用的类型和变量的类型必须是同一种类型)
void TestRef()
{
int iNum0 = 10;
int &iNum1 = iNum0;
int &iNum2 = iNum1;
// int &iNum3; // 定义引用时必须进行初始化
int &iNum6 = iNum0; //一个变量可以有多个引用
int iNum7 = 20;
// &iNum6 = iNum7; // 引用一旦定义,就不能够在改变
}
三.引用和指针的区别
1、引用在定义时必须初始化,指针没有要求。// int &iNum1=iNum0;
2、一旦一个引用被初始化为指向一个对象,就不能再指向其他对象,而指针可以在任何时候指向任何一个同类型对象 //int &iNum2 = iNum1; 即&iNum2不能指向其他对象
3、没有NULL引用,但有NULL指针。
4、在sizeof中含义不同:引用结果为引用类型的大小(int 、double、 char、、、、、 ),但指针始终是地址空间所占字节个数。
5、引用自加改变变量的内容(引用改变的是变量的值),指针自加改变了指针指向(指针改变的是变量的地址)
6、有多级指针,但是没有多级引用(引用只能指向一个对象)
7、引用比指针使用起来相对更安全