您的位置:首页 > 编程语言 > C语言/C++

C++ 引用和指针

2016-09-12 22:11 274 查看

引用

对象的别名,始终与相应类型的对象绑定在一起,必须进行初始化;只可以改变引用对象的值,而不可以改变引用的方向;使用安全,不为空,并且使用更加简单优雅。

//eg:

int i = 1;
int & ri = i;


指针

不需要一定进行初始化,可为空,指针值为指向对象的地址,可以改变指向的对象;使用存在危险,比如说出现“野指针”的情况,使用也没有引用简洁。

//eg:

int i = 1;
int *pi = &i;


易混淆点: const 关键字

指向常量的指针(pointer to const)和对常量的引用(reference to const): 均表示指向的对象为常量,不可以通过其间接修改指向对象的值

//eg:

int i = 1;
const int *pi = &i;
const int &ri = i;

*pi = 2;// 报错,常量对象不可以修改
ri = 2; //报错,常量对象不可以修改

cout<<&ri<<endl;
cout<<pi<<endl; //输出的值,即地址是一样的,指向i的地址


常量指针(const pointer)和常量引用:指针常量表示指针是固定不变的,即指向的对象地址是不变的,因此必须在定义时初始化,而对于引用来说,本来就是“常量的”,即不可以改变引用的绑定方向。

//eg:
int i = 1;
int * const pi;//报错,必须初始化
int * const pi = &i;//正确


指向常量对象的常量指针和常量引用常量:常量引用常量同对常量的引用,而常量指针常量则表示该指针是固定常量的,指向的值也是常量不变的,也必须进行初始化。

//eg:
int i = 1;
const int * const pi = &i;


顶层const和底层const

顶层const指的是对象本身是一个常量,如常量指针(const pointer)或常量的算是类型或类等,底层const指的是指针和引用等复合类型指向的对象是常量,当执行对象拷贝时,顶层const不受什么影响,而底层const存在较多限制,一般来说,非常量可以转化为常量,反之不行。

//eg:

int i = 0;
int *const top_pi = &i;//顶层const
const int * low_pi = &i;//底层const
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: