赞
踩
(1)&符号在C语言中表示取地址运算;
(2)C++对&符号进行拓展,&符号新增了引用的用法;
(3)声明引用时,必须同时对其进行初始化;
(4)引用声明完毕后,相当于目标变量有两个名称,引用名就相当于变量的别名,操作引号名就相当于操作变量本身;
(1)指针在C和C++中都有,且使用方法和实现本质完全相同;但是引用只有C++才有;
(2)引用的定义和识别的关键符号是&,注意和指针取地址的含义进行区分;
(3)引用可以理解成功能弱化、安全性增、受限的指针;
(4)引用型变量在定义时必须初始化,而指针变量可以不初始化;
(5)引用型变量初始化后就不能再修改,而指针变量可以;
(6)引用主要用在函数传参和返回值;
#include <iostream>
using namespace std;
//C语言用指针实现两个int型数的交换
void swap1(int *pa, int *pb)
{
int tmp;
tmp = *pa;
*pa = *pb;
*pb = tmp;
}
//C++用引用符&实现两个int型数的交换
//传入的是变量名的引用名,操作引用名就相当于操作变量本身
void swap2(int &ra, int &rb)
{
int tmp;
tmp = ra;
ra = rb;
rb = tmp;
}
int main()
{
int a = 1, b = 2;
int c = 3, d = 4;
//传入变量的指针
swap1(&a, &b);
//直接传变量名,相当于是传的引用名
swap2(c, d);
cout<< "a=" << a <<";"<< "b=" << b << endl;
cout<<"c=" << c <<";"<< "d=" << d << endl;
return 0;
}
//程序输出结果
[root#]$ a=2;b=1
[root#]$ c=4;d=3
(1)上面的代码用指针和引用两种方式,实现了交换两个int型变量数值的函数;
(2)重点关注&符号在指针和引用两种方式是如何使用的;
int a;
const int &b = a;
//下面的代码在编译的时候会报错
//因为用const去修饰引用就表示引用是只读的,不能修改
void swap2(const int &ra, const int &rb)
{
int tmp;
tmp = ra;
ra = rb;
rb = tmp;
}
//报错信息
In function ‘void swap2(const int&, const int&)’:
error: assignment of read-only reference ‘ra’
error: assignment of read-only reference ‘rb’
(1)b是变量a的引用名,const修饰后,无法通过b来修改a;
(2)const修饰引用主要是用在函数传参中,当传入的引用只需要读而不需要改时,就可以用const去修饰引用,防止函数中误操作去进行修改,这个C语言的函数用const去修饰传参的思路是一样的;
#include <iostream>
using namespace std;
int main()
{
int a = 1;
char b;
long long c;
int &ra = a;
char &rb = b;
long long &rc = c;
cout << "sizeof(ra)=" << sizeof(ra)<<endl;
cout << "sizeof(rb)=" << sizeof(rb)<<endl;
cout << "sizeof(rc)=" << sizeof(rc)<<endl;
return 0;
}
[root#]$ ./a.out
sizeof(ra)=4
sizeof(rb)=1
sizeof(rc)=8
(1)sizeof得到的不是引用本身的大小,而是引用指向的目标变量的大小;
(2)可以这样理解,引用名就是一个别名而已,本身没有大小,对引用名做sizeof操作,就是对引用指向的变量做sizeof操作;
(3)sizeof操作体现了指针和引用的区别,对指针变量做sizeof操作,得到的确定的字节,4字节(32位操作系统)或者8字节(64位操作系统);
(1)int &b = a; 类似于 int * const b = &a;
(2)C++标准并没有规定引用是否占用内存空间,但是大多数编译器都把引用实现为const指针,所以大部分编译器中引用也是要占内存空间的;
(3)引用是天然const的,所以定义时必须初始化指向变量,否则就没意义了;
(4)引用本质是指针,是地址,所以才能实现传址调用的效果;
总结:功能上来说,引用是受限制的指针,相当于用const修饰的指针变量类型;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。