高级(复杂)指针的含义
備用知識
指針數(shù)組: int *p[10];
數(shù)組指針: int (*p)[10];
函數(shù)聲明: int* f( ); //f是一個返回int*指針的函數(shù)
函數(shù)指針: int (*p)( );
【突破口】
——當前變量是函數(shù)?數(shù)組?指針?某種類型的強制轉(zhuǎn)換?
學會把解析完的內(nèi)容看成一個整體!
(1)是函數(shù):明確函數(shù)的形參與返回值
(2)是指針數(shù)組:明確指針數(shù)組的元素的類型
(3)是數(shù)組指針:明確指針指向的數(shù)組的元素類型
(4)是函數(shù)指針:明確函數(shù)指針指向的函數(shù)的形參與返回值
(5)是某種類型的強制轉(zhuǎn)換:類型進行用括弧()括起來,后邊跟著一個其他類型的變量,見特例(* (void(*)())0) ()解讀
高級(復(fù)雜)指針的含義
解讀下面的幾個很好的例子
(* (void(*)())0) ()解讀
(*(void(*)())0) () //等價于(*(void(*p)())0)() //void(*p)():p是一個函數(shù)指針(指向形參為void,返回值為void的函數(shù)),實際上void(*p)()是一種類型,可用作強制轉(zhuǎn)換 //(void(*p)()) 0 :把0強制轉(zhuǎn)換成上述說的void(*p)()類型,該類型是函數(shù)指針類型 //*(void(*p)())0 :轉(zhuǎn)換完成后,用*進行間接訪問函數(shù)指針里邊的內(nèi)容(因為是該指針是函數(shù)指針,因此用*訪問該指針得到的內(nèi)容肯定是某個函數(shù)的名稱,即該函數(shù)的地址)--->因此*(void(*p)())0的含義是取出0地址處的函數(shù)的地址 //(*(void(*)())0) () :因為上面已經(jīng)取出了函數(shù)的地址,(*(void(*)())0) () 就是函數(shù)指針的調(diào)用形式。 【擴展】解讀(*(char** (*)(char**,char**))0)(char**,char**)高級(復(fù)雜)類型轉(zhuǎn)換符
如何獲得某個類型的類型轉(zhuǎn)換符?
①首先聲明一個給定類型的變量;
②然后把聲明中變量名和聲明末尾的分號去掉;
③最后將剩余的部分用一個括號整個“封裝”起來即可。
例:
float (*p)();//聲明p是一個指向形參為void返回值為float的函數(shù)指針
(float (*)()) //表示一個“指向形參為void返回值為float的函數(shù)指針”的類型轉(zhuǎn)換符
總結(jié)
以上是生活随笔為你收集整理的高级(复杂)指针的含义的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用CMake编译运行在网上下载的源文件s
- 下一篇: C语言深度解剖