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

C++指针和引用

2016-03-18 11:00 176 查看
1.指针存储所指对象的地址

int i=5;
int *p=&i;
*p=3;


以上语句,输出i的结果为3。因为,*p是对指针的解引用,即并未改变p值本身,而是改变了*p——即所指向

对象的值

2.指针本身是对象的一种,因此指针可以是常量。当指针为常量时,其所指向地址是唯一的。可以将指针常
量复制给一般的指针对象

int i=5;
int * const p=&i;
int *p1=p;


3.定义常量指针有两种方式

(1).为本身是常量的对象定义指针

const int i=5;
const int *p=&i;


此处p的定义处必须在指针符号*前加const,以下语句是错误的:

const int i=5;
int *p=&i;


这是因为,常量对象i不能被更改,而p的定义被解释为一般对象的指针。由于通过对指针解引用,使用*p,

可以修改其所指对象的指。因此这在编译器看来是矛盾的,即常量i不可修改,*p可修改,矛盾。
(2).为本身不是常量的对象定义指针

int i=5;
const int *p=&i;


这里,虽然没有直接将i定义为const变量,但在第2行符号*前定义了const并绑定了i。那么此时,编译器认为

程序将i定义为了常量。因此const type *被解释为“对象是常量的指针”。这样做的好处是防止数据在传递过程中被更改。

4.引用不是对象,它仅仅是所引用对象的别名
引用可以理解为另一种形式的指针,而它们的区别在于:由于引用本身不是对象,因此引用本身不能存储任

何对象的地址。对引用的修改,就是对其引用对象本身的修改。

int i=5;
int &r=i;
r=3;


此时,i的输出为3

5.由于引用不是对象,因此引用本身不能被赋予常量的意义,在符号&前使用const则和常量指针一样,是将
所指对象定义为常量

int i=5;
const &r=i;


6.指针的引用

int i=5;
int *p;
int *&r=p;//此处r即是引用,又是和p相关联的指针。r指向的是p本身的值,即某个地址。因此,这条语句可以解释为,r是指针p的引用。对r的修改,就是对p指向地址的修改。
r=&i;//r修改为i的地址&i,此时p指向了i
*r=0;//对r解引用,等价于对p解引用,此时i=0


7.顶层const和底层const

(1).顶层const是指对象本身是const,如:

cont type i;
type * const p;


(2).底层const是指对象所指对象是const,如:

const type *p;
const type &r;


因此,底层const的概念只存在于指针和引用类型中。而由于引用本身不是对象,因此引用只能是底层const。而指针,既可以是顶层const,又可以是底层const。如:

const type * const p;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: