码迷,mamicode.com
首页 > 其他好文 > 详细

关于指针和引用

时间:2015-08-04 09:23:23      阅读:104      评论:0      收藏:0      [点我收藏+]

标签:

1.异同点

引用与指针都是复合类型(compound type),建立在已存在类型的基础上

引用是对对象的绑定,是对象的别名,并不是具体的对象;指针指向某一对象,指针本身就是一个对象

引用在定义时必须初始化,且只能绑定一个对象不能修改;指针在定义时不要求初始化,且指针可以更改指向的对象

2.初始化

引用的初始化:

技术分享
1 int a = 3; 
2 int &ra = a;
3 ++ra;   //a=4
View Code

指针的初始化:

技术分享
1 int b = 4;
2 int *pb = &b;
View Code

指针初始化为空:

技术分享
1 int *p1 = 0;
2 int *p2 = nullstr;
3 int *p3 = NULL;//#include <cstdlib>
View Code

注意:用字面值0初始化指针,下面两种情况:

技术分享
1 int i = 0;
2 const int j = 0;
3 int *pa = i;         //error
4 int *pb = j;         //ok
View Code

3.关于引用的引用,指向指针的指针,指向引用的指针和指针的引用

引用的引用:因为引用本身不是一个具体的对象,因此不存在对引用的引用

技术分享
1 int i = 1;
2 int &ri = i;
3 int &rii = ri;     //ok
4 int& &riii = ri;   //error
View Code

引用的引用,首先是个引用,然后引用的对象是引用,所以分析 int& &riii = ri; 左侧按 照从右到左分析&rii是个引用,int&引用的对象是个int类型的引用

指针的指针:指针本身是个对象,因此可以定义指向指针的指针

技术分享
1 int x = 0;
2 int *px = &x;
3 int **pxx = &px;
4 
5 cout << x << " " << *px << " " << **pxx << endl;
6 cout << &x << " " << px << endl;
7 cout << &px << " " << pxx << endl;
View Code

指向引用的指针:同引用的引用一样,显然指向引用的指针是不存在的

技术分享
1 int& *p = &ra;
View Code

指针的引用

技术分享
1 int a = 1;
2 int *pa = &a;
3 int* &rpa = pa;
4 
5  
6 cout << pa << " " << rpa << endl;
7 cout << *pa << " " << *rpa << endl;
8 *rpa = 2;
9 cout << a << endl; 
View Code

注意:对于比较复杂的变量的定义,在赋值运算符左侧按照从右到左的分析方法是比较清晰的

4.关于void*

void*指针可以存放任意数据类型的地址,其他类型的指针只能指向与其类型相同的对象

关于指针和引用

标签:

原文地址:http://www.cnblogs.com/Cgsyuan/p/4701013.html

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