日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

高级(复杂)指针的含义

發布時間:2025/3/21 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 高级(复杂)指针的含义 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

備用知識
指針數組: 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的函數指針”的類型轉換符

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的高级(复杂)指针的含义的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。