指針,引用,const等復合類型的幾點區別


一。指針與引用的區別(面試長問題)

  1. 指針本身是一個對象,允許指針賦值和拷貝,開辟新的的內存存儲指針。而引用只是對象的別名不允許復制拷貝,不會開辟新內存。
  2. 指針在其生命周期內可以指向不同的對象,而引用不能再與其他對象綁定。
  3. 指針無需在定義時賦初值,但是引用必須要綁定一個初始對象。

二。空指針與void *類型指針
空指針:不指向任何對象,可以再定義指針時將指針初始化為空,可以避免錯誤。
生成空指針的方法:int *p1=nullstr;    //三種方法是等價的 
                              int *p2=0;
                              int *p3=NULL;

nullstr是C++11新加入的方法,在使用時優先選擇此方法,NULL是一個預處理變量,需要添加cstdlib頭文件,才能處理,具有C屬性。

void* 類型指針是一種特殊的指針類型,可以存放任意類型的指針,里面存放的也是地址;只是不能對它進行直接操作,因為無法判斷存儲對象的類型;能做的事情拿它與其他的指針進行比較、作為函數的輸入輸出或者賦給另一個void *指針。

三。常量指針與指針常量的區別 
常量指針:指針不能變,定義時必須初始化,但是所指對象的值可以改變
指向常量的指針:指向的對象是常量,指針可變,不一定定義時初始化
 
int *const p1=&a;  //p1常量指針,指向int型對象a,指針p1不能改變,只指向a,而a的值可以改變;
const int *p2=&b;  //p2指向常量指針,指向int型常量a,p2指向的對象a不能改變,p2值可以改變。

int a=10,b=20;int *const p=&a; //指針p不能改變,只指向a,而a的值可以改變;p=&b //錯的*p=b //對的
還有常量引用與指向常量的引用,對於復合類型的判斷,從右往左的閱讀習慣,最接近變量的是最內層的修飾。


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com