亚欧洲精品在线观看,窝窝影院午夜看片,久久国产成人午夜av影院宅,午夜91,免费国产人成网站,ts在线视频,欧美激情在线一区

C語言

C語言之復雜指針詳解

時間:2025-02-01 13:41:01 C語言 我要投稿
  • 相關推薦

C語言之復雜指針詳解

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

C語言指針用法詳解08-21

C語言數組與指針詳解08-15

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

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

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

C++ this指針詳解07-04

C語言指針的長度和類型詳解10-13

C語言入門之指針用法06-24

c語言指針中的二級指針示例詳解11-07