C語言筆記-複雜指標的識別方法(右左法則)

在c語言學習中我們經常看到一些定義的很複雜的名稱,我們可以根據以下規則來識別其定義的內容和含義,舉例來看:

int (*(*func)[5])(int *p);

func被一個圓括號包含,左邊又有一個*,那麼func是一個指標,跳出括號,右邊是一個[]運算子號,說明func是一個指向陣列的指標,現在往左看,左邊有一個*號,說明這個陣列的元素是指標,再跳出括號,右邊又有一個括號,說明這個陣列的元素是指向函式的指標。總結一下,就是:func是一個指向陣列的指標,這個陣列的元素是函式指標,這些指標指向具有int*形參,返回值為int型別的函式。

總結就是:

C語言所有複雜的指標宣告,都是由各種宣告巢狀構成的。如何解讀複雜指標宣告呢?右左法則是一個既著名又常用的方法。不過,右左法則其實並不是C標準裡面的內容,它是從C標準的宣告規定中歸納出來的方法。C標準的宣告規則,是用來解決如何建立宣告的,而右左法則是用來解決如何辯識一個宣告的,兩者可以說是相反的。

右左法則:首先從最裡面的圓括號看起,然後往右看,再往左看。每當遇到圓括號時,就應該掉轉閱讀方向。一旦解析完圓括號裡面所有的東西,就跳出圓括號。重複這個過程直到整個宣告解析完畢。