復合型別是指基於其他型別定義的型別。c++有很多復合型別,介紹其中的引用和指標
對變數的宣告的解釋:一條簡單的宣告語句是由乙個資料型別和緊隨其後的變數名列表組成。其實更通用的描述是:一條宣告語句由乙個基本資料型別和緊隨其後的乙個宣告符列表組成。每個宣告符命名了乙個變數並指定該變數是與基本資料型別有關的某種型別。
2.3.1 引用
引用即別名,引用是為已存在的物件所起的另外乙個名字。在初始化變數時,初始值會被拷貝到新建的物件中。而在定義引用時,程式會把引用和它的初始值繫結在一起,而不是拷貝。一旦初始化完成,引用將和初始化物件一直繫結在一起。因為無法令引用重新繫結到另外乙個物件,因此引用必須初始化。
int val = 1024;
int &temp = val;
int &temp2 = temp;
cout<
cout<2.3.2 指標
指標是指向另外一種型別的復合型別,與引用類似,指標也實現對其他物件的間接訪問。而指標與引用有很多不同點,其一,指標本身就是乙個物件,允許對指標賦值和拷貝,而且在指標的生命週期內可以先後指向多個不同物件。而引用初始化一旦完成,引用將和初始化物件一直繫結在一起。其二,指標不必須初始化,若沒有初始化指標,將指向隨機位址,即不確定的值。
int *p1,*p2;
double dp1,*dp2; //dp1是double型別變數,dp2是指向double型別的指標變數
double dval;
double *p = dval; //正確 指標p是指向double型別的指標
double *p2 = p; //正確 指標p2也是指向double型別的指標
int *pi = dval; //錯誤 試圖把double型別賦值給int型指標
int *pi = p; //同上
指標的值(即位址)應屬於下列4種狀態之一
1、指向乙個物件
3、空指標,沒有指向任何物件
4、無效指標,即除上述三種的其他型別
試圖以拷貝或其他方式訪問無效指標的值都將報錯,這一點和使用未經初始化的變數是一樣的(變數會預設初始化隨機值),編譯器並不負責檢查此類錯誤。因此訪問無效指標的後果無法預計。
儘管2 3種指標是有效的,但其使用也收到限制。顯然這些指標沒有指向任何具體物件,所以試圖訪問此類指標物件的後果也不確定,無法預計。
int* p1,p2; //p1是指向int的指標,p2是int型別的資料,這樣寫容易產生誤導
//規範寫法:
int *p1,*p2;
通過*個數可以區分指標的級別,**表示指向指標的指標, * * *表示指向指標的指標的指標,以此類推。
int ival = 44.45;
int *pi = &ival; //一級指標
int *pd = &val; //pd和pi指向同乙個物件val
int **ppi = π //ppi指向pi指標 所指物件
如圖描述了他們的關係:
指標可以巢狀使用,解位址運算子*同樣也需要巢狀使用。如, *pi的值是int型數ival的值,而 *ppi的值是指標 *pi,**ppi才是最初指向的int型數ival。
引用只是乙個其繫結變數的別名,引用不是物件,因此不存在指向引用的指標。但指標是變數,可以定義對指標的引用
int i = 40;
int val = 100;
int *p = &i;
cout << p << endl; //輸出i的位址
int *&r = p; //定義指標的引用,r指向 指標變數p
r = &val; //r引用了指標p,因此現在p指向變數val
cout << *r << endl; //100
cout << p << endl; //輸出val的位址
cout << *p
下面定義合法嗎?原因?
int i=424; void *p =&i; long *lp = &i;
說明變數的型別和值:
int *ip,i, &r = i;
int i,*ip = 0;
int * ip,ip2;
int val = 1024;
int *p1 = 0; //合法 空指標
int *p2 = &val; //合法 p2指向val
if(p1) //p1空指標 值0 false
...if(p2) //p2存放val的位址 true
...
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...