奶头挺立呻吟高潮av全片,成人试看120秒体验区,性欧美极品v,A片高潮抽搐揉捏奶头视频

C語言

C語言之復雜指針詳解

時間:2024-10-14 13:19:14 C語言 我要投稿
  • 相關推薦

C語言之復雜指針詳解

  因為C語言所有復雜的指針聲明,都是由各種聲明嵌套構成的。如何解讀復雜指針聲明呢?右左法則是一個既著名又常用的方法。不過,右左法則其實并不是C標準里面的內容,它是從C標準的聲明規定中歸納出來的方法。下面是小編為大家整理的C語言之復雜指針詳解,歡迎參考~

  在《C陷阱與缺陷》第二章第一節中有這樣一個聲明:

   (*(void(*)())0)();

   看到這樣的表達式估計讓不少人都“不寒而栗”了吧,其實雖然看起來復雜,但是構造這類表達式其實只有一條簡單的規則:按照使用的方式來聲明。

  首先先介紹一個著名的解析法則:右左法則:首先從圓括號起,然后向右看,然后向左看,每當遇到圓括號時,就調轉閱讀方向,當括號內的內容解析完畢,就跳出這個括號,重復這個過程直到表達式解析完畢。

   其實我們發現,所謂復雜指針離不開指針函數,函數指針,指針數組,函數指針這四個概念并且括號,*比較多,其實只要我們仔細分析這些看起來復雜的表達式,其實他的邏輯也是很清晰的。

  舉個例子,使用右左法則解析復雜的表達式:

   Int *(*(*pfun)(int *))[10];

   用右左法則解析這個表達式,首先要找到未定義的標識符pfun,當往右看的時候遇到括號,于是調轉方向,再朝相反的方向看,pfun遇到了*,說明pfun是一個指針,再往左看又遇到了括號,因此又要調轉方向,遇到的是另外一個括號,因此說明指針所指向的是一個函數,函數的參數是一個整型指針。然后又向相反的方向看,又遇到了一個*,說明該函數的返回值又是一個指針,在往左看又遇到括號,所以再次調轉方向,把內側的括號里的內容看完,出了括號遇到的是數組,說明指針所指向的函數的返回值類型的指針指向的是數組,這有點向繞口令,但是還是有邏輯可循的。

   但是右左法則確實有點麻煩,我們這樣看上面這個表達式:首先fpun是一個指向函數的函數指針,該函數有一個整型指針類型的參數并且返回值也是一個指針,所返回的類型指向的是一個數組,并且這個數組有10個元素,每個元素是整型指針類型。

   接下來我們在回過頭來看文章最開始的那個表達式:

  (*(void(*)())0)();

   我們先看括號里面的內容,首先0被強制轉換為一個返回值為void類型,沒有參數的函數的函數指針,指針(void)(*)()0)指向了一個函數。

   要想很好的解決這個問題,選擇使用typedef是一個很好的方式。

【C語言之復雜指針詳解】相關文章:

C語言的指針類型詳解05-21

C語言復雜指針是什么08-15

C語言指針函數和函數指針詳解09-29

C語言指針的概念08-20

C語言中指針變量作為函數參數詳解07-01

如何理解C語言指針05-19

C語言中的指針是什么08-08

如何使用C語言數組指針09-14

C語言中指針的概念03-16

C語言指針知識點10-10

主站蜘蛛池模板: 永胜县| 普安县| 改则县| 观塘区| 武宁县| 漯河市| 钟山县| 龙海市| 来凤县| 天峻县| 永嘉县| 乐昌市| 永仁县| 抚顺市| 镇沅| 亳州市| 雷波县| 商洛市| 广河县| 玛曲县| 万源市| 申扎县| 遂宁市| 大新县| 汉阴县| 吴川市| 兴城市| 门源| 城口县| 商水县| 昌平区| 中宁县| 琼海市| 岢岚县| 揭阳市| 星子县| 措勤县| 柳河县| 延川县| 临湘市| 大连市|