一。指標與引用的區別(面試長問題)
指標本身是乙個物件,允許指標賦值和拷貝,開闢新的的記憶體儲存指標。而引用只是物件的別名不允許複製拷貝,不會開闢新記憶體。
指標在其生命週期內可以指向不同的物件,而引用不能再與其他物件繫結。
指標無需在定義時賦初值,但是引用必須要繫結乙個初始物件。
二。空指標與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; //對的
還有常量引用與指向常量的引用,對於復合型別的判斷,從右往左的閱讀習慣,最接近變數的是最內層的修飾。
復合型別 指標和引用
復合型別,顧名思義就是指基於其他型別定義的型別,主要有 指標 與 引用 本文將先分別介紹這兩種型別,接著將介紹二者之間的異同之處。一般來講,一條宣告通用的格式為 基本資料型別 宣告符。在簡單宣告語句中,宣告符就是變數名,換句話說,此時的變數型別就是宣告符前面的基本資料型別。而復合型別就是一種基於基本...
C 復合型別 引用和指標
include using namespace std 復合型別 基於其他型別定義的型別 常見 引用 指標 引用 1.右值引用 rvalue reference 2.左值引用 lvalue reference 引用必須是乙個物件,引用就是起乙個別名,引用必須初始化。指標 是 指向 point to ...
C 復合型別 引用與指標
復合型別 引用與指標 1 引用即別名 int refval ival int ii refval equal ii ivalrefval就是ival的另乙個名字,直接食用即可。2 引用並非物件,相反的,它只是為存在的物件起的另乙個名字 3 引用只能bind物件,不能與字面值或某個表示式bind in...