備用知識高階(複雜)指標的含義指標陣列: int *p[10];
陣列指標: int (*p)[10];
函式宣告: int* f( ); //f是乙個返回int*指標的函式
函式指標: int (*p)( );
【突破口】
——當前變數是函式?陣列?指標?某種型別的強制轉換?
學會把解析完的內容看成乙個整體!
(1)是函式:明確函式的形參與返回值
(2)是指標陣列:明確指標陣列的元素的型別
(3)是陣列指標:明確指標指向的陣列的元素型別
(4)是函式指標:明確函式指標指向的函式的形參與返回值
(5)是某種型別的強制轉換:型別進行用括弧()括起來,後邊跟著乙個其他型別的變數,見特例(* (void(*)())0) ()解讀
解讀下面的幾個很好的例子
int
*(*p)[10]; //p是乙個指標(p指向乙個陣列(該陣列的元素型別是int
*))int
**(*p[6])(); //p是乙個陣列(該陣列的元素型別是int
*的指標(該指標是乙個指向形參為void返回值為int
**的函式指標))
int*(
*p())(); //p是乙個函式(該函式形參為void,返回值是int
*型別的指標(該指標又是乙個指向形參為void,返回值為int
*型別的函式指標))
int (**(*p)())(); //p是乙個指標(p指標指向形參為void,返回值為int
**的二級指標(該二級指標是形參為void,返回值為int型別的函式指標))
int (*(
*p)())[6]; //p是乙個函式指標(p指向形參是void,返回值是int
*型別的指標(該返回的指標指向乙個陣列(陣列元素是int型別)))
char* (*p[3])(char* p);//p是乙個陣列(陣列元素為char*型別的指標(該指標指向形參為char*,返回值為char*型別的函式))
int*(
*(*(
*p)())[6])() //p是乙個函式指標(p函式指標指向形參是void,返回值是int
*的指標(該返回的指標指向乙個陣列(陣列型別為int
*指標(int
*指標又指向形參為void,返回值為int
*的函式))))
(* (void(*)())0) ()解讀
(*(void(*)())0) ()
//等價於(*(void(*p)())0)()
//void(*p)():p是乙個函式指標(指向形參為void,返回值為void的函式),實際上void(*p)()是一種型別,可用作強制轉換
//(void(*p)()) 0 :把0強制轉換成上述說的void(*p)()型別,該型別是函式指標型別
//*(void(*p)())0 :轉換完成後,用*進行間接訪問函式指標裡邊的內容(因為是該指標是函式指標,因此用*訪問該指標得到的內容肯定是某個函式的名稱,即該函式的位址)--->因此*(void(*p)())0的含義是取出0位址處的函式的位址
//(*(void(*)())0) () :因為上面已經取出了函式的位址,(*(void(*)())0) () 就是函式指標的呼叫形式。
【擴充套件】解讀(*(char** (*)(char**,char**))0)(char**,char**)
高階(複雜)型別轉換符
如何獲得某個型別的型別轉換符?
①首先宣告乙個給定型別的變數;
②然後把宣告中變數名和宣告末尾的分號去掉;
③最後將剩餘的部分用乙個括號整個「封裝」起來即可。
例: float (*p)();//宣告p是乙個指向形參為void返回值為float的函式指標
(float (*)()) //表示乙個「指向形參為void返回值為float的函式指標」的型別轉換符
各種指標的含義
int hoge hoge是指向int的指標 int hoge hoge是指向int的指標的陣列 int hoge hoge是指向int型陣列的指標 int func int func是指向返回int 引數為int的函式的指標 int func table 10 int a func table是返...
滑鼠指標含義
default 預設游標 通常是乙個箭頭 auto 預設。瀏覽器設定的游標。crosshair 游標呈現為十字線。pointer 游標呈現為指示鏈結的指標 乙隻手 move 此游標指示某物件可被移動。e resize 此游標指示矩形框的邊緣可被向右 東 移動。ne resize 此游標指示矩形框的邊...
演算法複雜度的含義
o 1 輸入資料增大多少倍,耗時 耗空間都不變。雜湊演算法就是典型的 o 1 時間複雜度,無論資料規模多大,都可以在一次計算後找到目標。o n 資料量增大幾倍,耗時也增大幾倍 o n 2 資料量增大 n 倍時,耗時增大 n 的平方倍 o logn 當資料增大 n 倍時,耗時增大 logn 倍 例如 ...