高级(复杂)指针的含义
生活随笔
收集整理的這篇文章主要介紹了
高级(复杂)指针的含义
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
備用知識
指針數組: int *p[10];
數組指針: int (*p)[10];
函數聲明: int* f( ); //f是一個返回int*指針的函數
函數指針: int (*p)( );
【突破口】
——當前變量是函數?數組?指針?某種類型的強制轉換?
學會把解析完的內容看成一個整體!
(1)是函數:明確函數的形參與返回值
(2)是指針數組:明確指針數組的元素的類型
(3)是數組指針:明確指針指向的數組的元素類型
(4)是函數指針:明確函數指針指向的函數的形參與返回值
(5)是某種類型的強制轉換:類型進行用括弧()括起來,后邊跟著一個其他類型的變量,見特例(* (void(*)())0) ()解讀
高級(復雜)指針的含義
解讀下面的幾個很好的例子
(* (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的函數指針”的類型轉換符
總結
以上是生活随笔為你收集整理的高级(复杂)指针的含义的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用CMake编译运行在网上下载的源文件s
- 下一篇: C语言深度解剖