最近在学习C++,所以总结了一些引用和指针的基础知识分享给大家。下面是一些相关的概念。
复合类型:是指基于其他类型定义的类型,引用和指针就是其中的两种。
- 引用(Reference):就是为对象起了一个别名,定义之后就把引用和他的初始值绑定(注意不是赋值)在了一起,一旦初始化完成,引用就无法再绑定其它对象了,之后对引用的所有操作都是在与之绑定的对象身上进行的。声明方式为&d,d为声明的变量名。
例如
int ival=1024;
int &refVal=ival; //refVal 指向ival(是ival的另外一个名字)
int &refVal2;//错误,引用必须要有与之绑定的对象
int &refVal3=refVal;//refVal3绑定到了与refVal绑定的对象上,即refVal3绑定到了ival上
int i=refal;//i被初始化为ival的值
int &refVal4=10;//错误,初始对象必须是一个对象
- 指针(Pointer):是指向另外一种类型的复合类型,与引用相似,指针也实现了对其它对象的间接访问,但是有几点不同。其一,指针本身就是一个对象,允许对指针赋值和拷贝,而且在指针的生命周期内可以先后指向几个不同的对象。其二,指针无需在定义时赋初值,在块定义域内定义的指针如果没有被初始化,将拥有一个不确定的值。
声明方式为*d,d是变量名。
指针存放某个对象的地址,要想获取该地址,需要取地址符&。例如:
int ival=42;
int *p=&ival;//p存放变量ival的地址,p是指向ival地址的指针
第二条语句把p定义为一个指向int类型的指针,随后初始化p另其指向名为ival的int对象,因为引用不是对象,没有实际地址,所以不能定义指向引用的指针。
- 使用指针访问对象:如果一个指针指向了一个对象,则允许使用解引用符来访问该对象。为d赋值实际上是为d所指的对象赋值。
int ival=0;
int *p=&ival;
cout<<*p<<endl;// 由*得到指针p所指的对象,输出0
*p=2;//由*得到p所指的对象,即可经由p为ival赋值
cout<<*p;//输出0
基础知识就是这些啦,本人也是小菜鸟一枚,有错误的地方欢迎指正。