1、複雜陣列
int a[10];
(1)int *p[10]; //p是乙個陣列,含有10個整數指標的陣列
//這裡定義的是乙個大小為10的陣列,它的名字是p,然後陣列中放的是指向int 的指標(int*) ;
(2)int (*q)[10] =&a; //q是乙個指標,q指向乙個含有10個整數的陣列。
//由括號括起來的部分(*q),可知道q是個指標,然後閱讀後面,可知q是個指向乙個含有10個整數的陣列的指標。
(3)int (&w)[10]=a; //w是乙個引用,引用乙個含有10個整數的陣列.
//由括號括起來的部分(*w),可知道w是個引用,然後閱讀後面,可知w引用乙個含有10個整數的陣列的指標。
tip:要理解陣列宣告的含義,最好的方法就是從陣列名開始按照由內向外的順序閱讀。有括號,則括號整體括起來的整體型別就是名字(假設為x)的型別(指標,引用等),如上面:x是個_;沒有括號,則x直接就是乙個陣列;然後不斷向左讀取資訊,讀取得到資訊作為陣列內元素的型別,即名字所作用的物件的型別。總之就是要理解所宣告的名字是什麼型別,然後,該名字是作用在上面型別的物件上。分析: int *(&r)[10]=a;
//r是乙個引用,引用乙個含有10個指標的陣列。
2、非陣列的複雜型別宣告
(1)指向指標的引用:引用本身不是乙個物件,因此不能定義指向引用的指標。但指標是物件,所以存在對指標的引用
int i=5;
int &a=i; //a是乙個引用
int *p=&i; //p是乙個指標
int *&r=p; //r是個引用,r是對指標的引用
int **q=p; //與q相鄰的*宣告了q是乙個指標,從右向左數的第二個說明了r作用的物件是乙個指標,這個指標是乙個整數,所以q是乙個指標,這個指標指向乙個int型的指標。
tip:面對一條複雜的指標或引用的宣告時,從右向左閱讀有助於理解它的真實含義。這裡相對第1部分來說,要判斷宣告的名字的型別,只有由名字開始向左閱讀的第乙個整體的型別作為名字的型別,然後繼續向左讀取資訊作為名字作用物件的型別。
理解復合型別的宣告
變數的定義包括乙個基本資料型別 base type 和一組宣告符。在一條宣告語句中,基本型別只能有一種,而宣告符的形式可以有多種。也就是說,在一條定義語句中可以定義出基本型別相同但是型別不同的變數。i是乙個int型的數,p是乙個int型指標,r是乙個int型引用 他們在同一條語句中宣告,基本型別相同...
指標和引用 復合型別的宣告
引用 引用是對物件起乙個別名,即相互繫結的意思,引用不像指標那樣可以指向不同物件,不可解綁,引用不是乙個物件,所以必須進行初始化。如 int a int b a 即b是a的別名,a的值也是b的值,改變a或b的值兩者值都會改變。引用只能繫結在物件上,不能繫結在字面值或某個表示式的結果上。如 int i...
python復合型別 python復合型別
鏈結 list python的列表的特點 可以隨時新增和刪除元素 可以做的操作有 切片,新增,刪除,查詢,修改,排序 列表元素可以是不同型別,在型別不同的情況下就無法排序 列表是有序的 定義小馬列表 li twilight pinkiepie rainbow dash 插入 insert self ...