C/C++程序员

*和&的作用 以及 引用和指针

2018-05-19  本文已影响21人  片片碎

一.*和&

1.在定义变量时,*是定义指针,&是引用 (但是只在c++中,c中是没有引用的,这样定义会直接报错)

2.在使用指针时, *是解指针(即取其指向的变量的值),&是取地址;(C/C++)


二.指针和引用的区别

c中没有引用,只能用指针。C++即可用指针又可使用指针。可以把引用当作一个特殊的指针,一个常量指针。

1)指针和引用都是可以让你间接引用其他对象的,所以当作为函数的参数,非常有用,在代码里也可以用于简化很长的数据。

2)指针使用操作符*和->,引用使用操作符.

3)c++中可以使用引用,但是不能使用指向空值的引用。所以,

a.引用必须被初始化且不能为空值,指针可以为空值

b.不存在指向空值的引用的事实说明引用的代码效率比指针要高,因为在使用引用前不需要测试其合法性

4)指针可以被重新赋值指向另一个不同的对象,但是引用则总是指向在初始化时被指定的对象,以后不可更改.

5)总结

a.考虑到存在不指向任何对象的可能(在这种情况下,你能够设置指针为空)

b.需要能够在不同的时刻指向不同的对象(在这种情况下,你能改变指针的指向)

c.如果总是指向一个对象并且一旦指向一个对象后就不会改变指向,那么你应该使用引用

b.当你重载某个操作符时,那么你应该使用引用


三.对象和指针

顺道复习一下对象和指针的定义,C++中,对对象和指针的定义:

对象的定义:对象是指一块能存储数据并具有某种类型的内存空间。一个对象a,它有值和地址&a,运行程序时,计算机会为该对象分配存储空间,来存储该对象的值,我们通过该对象的地址,来访问存储空间中的值。

指针也是对象,它同样有地址&p和存储的值p,只不过,p存储的数据类型是数据的地址。如果我们要以p中存储的数据为地址,来访问对象的值,则要在p前加解引用操作符"*",即*p。

对象有常量(const)和变量之分,既然指针本身是对象,那么指针所存储的地址也有常量和变量之分,常量指针是指,指针这个对象所存储的地址是不可以改变的,而指向常量的指针的意思是,不能通过该指针来改变这个指针所指向的对象。

我们可以把引用理解成变量的别名。定义一个引用的时候,程序把该引用和它的初始值绑定在一起,而不是拷贝它。计算机必须在声明r的同时就要对它初始化,并且,r一经声明,就不可以再和其它对象绑定在一起了。

实际上,你也可以把引用看做是通过一个常量指针来实现的,它只能绑定到初始化它的对象上。


五.附录

附录为指针和引用的相关知识

上一篇 下一篇

猜你喜欢

热点阅读