码迷,mamicode.com
首页 > 编程语言 > 详细

C++ Primer 学习笔记_17_从C到C++(3)--引用、const引用、引用传递、引用作为函数返回值、引用与指针区别

时间:2015-09-30 16:36:49      阅读:240      评论:0      收藏:0      [点我收藏+]

标签:c++ primer   c++   c语言   

欢迎大家阅读参考,如有错误或疑问请留言纠正,谢谢技术分享



一、引用
1、引用是给一个变量起别名
变量:
    名称
    空间
引用:
    引用不是变量
    引用仅仅是变量的别名
    引用没有自己独立的空间
    引用要与它所引用的变量共享空间
    对引用所做的改变实际上是对它所引用的变量的改变
    引用在定义的时候必须要进行初始化
    引用一经初始化,不能重新指向其他变量

2、定义引用的一般格式
(1)类型  &引用名 = 变量名;
(2)例如:
int a=1;
int &b=a;  // b是a的别名,因此a和b是同一个单元

(3)注意:定义引用时一定要初始化,指明该引用变量是谁的别名

(4)示例
#include <iostream>
using namespace std;
int main(void)
{
 int val = 100;
 //int& refval;	 Error,引用必须初始化
 int& refval = val;
 refval = 200;	 // 将200赋值给refval
               // 实际上改变的是val这个变量
 cout << "val=" << val << endl;
 int val2 = 500;
 refval = val2;	 // 不代表将refval引用至val2这个变量
                // 仅仅只是代表将val2赋值给refval,改变的还是val的值
 cout << "val=" << val << endl;
 return 0;
}
运行结果:
val=200
val=500

3、在实际应用中,引用一般用作参数传递与返回值


二、const引用
1、const引用是指向const对象的引用

2、示例

#include <iostream>
using namespace std;

int main(void)
{
 const int val = 1024;
 const int& refval = val;
 //int& ref2 = val;	// Error,nonconst reference to const object
 //refval = 200;	 Error,refval是一个常量
 int val2 = 1024;
 const int& ref3 = val2;	//const reference to nonconst object
 double val3 = 3.14;
 const int& ref4 = val3;	 // int temp = val3;
                         // const int& ref4 = temp;
 cout << "ref4=" << ref4 << endl;
 cout << "val3=" << val3 << endl;
 //int& ref5 = val3;	 Error ,不会产生中间变量
 return 0;
}

运行结果:

ref4=3

val3=3.14



三、引用传递
1、引用传递方式是在函数定义时在形参前面加上引用运算符"&"
    例如:swap(int &a,int &b);

2、在C语言中两种传递方式:
(1)按值传递:按值传递方式容易理解,但形参值的改变不能对实参产生影响
(2)指针传递:地址传递方式通过形参的改变使相应的实参改变,但程序容易产生错误且难以阅读

3、C++中,引用作为参数对形参的任何操作都能改变相应的实参的数据,又使函数调用显得方便、自然
(1)值传递     实参要初始化形参要分配空间,将实参内容拷贝到形参
(2)引用传递   实参初始化新参时不分配空间(效率更高)
(3)指针传递   本质是值传递,实参初始化形参也要分配指针空间(4个字节)。如果我们要修改指针的地址,单纯用指针传递也是不行的。

4、示例:

#include <iostream>
using namespace std;
void swap(int &x, int &y);
int main()
{
    int a, b;
    a = 10;
    b = 20;
    swap(a, b);  //在函数调用时,引用被初始化x = a, y = b;
    cout << "a=" << a << "b=" << b << endl;
    return 0;
}
void swap(int &x, int &y)
{
    int temp;
    temp = x;
    x = y;
    y = temp;
}

运行结果:

a=20b=10



四、引用作为函数返回值
1、引用的另一个作用是用于返回引用的函数

2、函数返回引用的一个主要目的可以将函数放在赋值运算符的左边
(1)示例
#include <iostream>
using namespace std;
// 引用作为函数返回值
int a[] = {0,1,2,3,4};
int& index(int i)
{
 return a[i];  //全局变量
}
int main(void)
{
 index(3) = 100;	 // 引用作为函数返回值,使得函数可以放在赋值运算符左边
                 // 函数返回引用,引用在函数返回的时候初始化
                 // index(3)在函数返回的时候被初始化为a[3];
 
 cout << "a[3]=" << a[3] << endl;
 return 0;
}
运行结果:
a[3]=100

3、注意:不能返回对局部变量的引用。
(1)示例
#include <iostream>
using namespace std;


int& add(int a, int b)
{
 int sum;
 sum = a + b;
 return sum; // 不能返回对局部变量的引用
}

int main(void)
{
 int n = add(3, 4);
 int& n2 = add(5, 6);	 // n2是引用,没有自己独立的空间
                      // n2的值依赖于它所引用的变量
                      // 如果n2所引用的变量的生命期结束了,也就是说n2是一个
                      // 无效的引用,那么n2的值将是不确定的。
 cout << "n2=" << n2 <<endl; //可能还没被 n 覆盖,因此正确
 cout << "n=" << n << endl;
 cout << "n2=" << n2 << endl;
 return 0;
}
运行结果:
n2=11
n=7
n2=20395849


五、引用与指针区别
1、引用访问一个变量是直接访问,而指针间接访问
2、引用是一个变量的别名,本身不单独分配自己的内存空间,而指针有自己的内存空间
3、引用一经初始化不能再引用其它变量,而指针可以
4、尽可能使用引用,不得已时使用指针。




参考:

C++ primer 第四版

C++ primer 第五版


版权声明:本文为博主原创文章,未经博主允许不得转载。

C++ Primer 学习笔记_17_从C到C++(3)--引用、const引用、引用传递、引用作为函数返回值、引用与指针区别

标签:c++ primer   c++   c语言   

原文地址:http://blog.csdn.net/keyyuanxin/article/details/48829249

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!