概述
引用,指针
1.引用(reference)
当我们使用术语“引用”时,我们所指的一般是左值引用。引用是对象的另一个名字。一般初始化变量时,初始值将被拷贝到新建对象中。但是定义引用时,程序会将它和初始值绑定在一起,而不是将初始值拷贝给它。除了两种情况外,其余情况下引用的类型要严格匹配其对象类型。
2.指针(pointer)
指针本身就是一个对象,允许对指针赋值和拷贝。指针无需在定义时赋初值。
指针存放某个对象的地址,想要获取改地址,需要使用取地址符(操作符&)。
int ival=42;
int *p=&ival;//声明指针写成*p的形式。
除了两种情况外,指针类型都要与它所指的对象类型严格匹配。
第一种情况是,在初始化常量引用时,允许用任意表达式作为初始值,只要该表达式的结果能够转换成为引用类型即可。
如果指针指向了一个对象,则允许用解引用符(操作符*)指向该对象。
int ival=42;
int *p=&ival;//p存放着对象ival的地址,也就是说p是指向ival的指针
*p=0;//使用解引用符访问该对象,将ival的值修改为0。
像&和*这样的符号,既可以所谓运算符,也可以作为声明的一部分出现。
int i=42;
int &r=i;//&紧随类型名出现,是声明的一部分,r是一个引用。
int *p;//*紧随类型名出现,是声明的一部分,p是一个指针。
p=&i;//&在表达式中出现是一个取地址符。
*p=i;//*在表达式中出现,是一个解引用符。
3.空指针
空指针不指向任何对象。生成空指针的方法如下,最常用的是nullptr;
int *p1=NULL;
int *p2=0;
int *p3=nullptr;
4.void*指针
void*是一种特殊指针类型,它可以存放任何类型的地址。但我们不能直接操作void*类型的指针,因为不知道它是什么类型。为了确保转换后的类型是指针所指的类型,我们使用static_cast函数。
void *p=&d;
double *dp=static_cast<double*>(p);
5.指向指针的引用
引用不是一个对象,因此不能够定义指向引用的指针;但是指针是一个对象,因此可以定义指向指针的引用。
int i=42;
int *p;//定义p是一个指针
int *&r=p;//定义r是指针p的一个引用。即r是p的别名。
r=&i;//r指向i的地址,即p指向i得地址。
*r=0;//使用r将i的值修改为0。
//面对一个比较复杂的指针或者引用的语句的时候,从右向左阅读有助于弄清楚含义。
最后
以上就是危机铅笔为你收集整理的《c++ primer》第二章 引用与指针的全部内容,希望文章能够帮你解决《c++ primer》第二章 引用与指针所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复