我見過的最好的關於typedef函式指標宣告的解說

2022-01-30 16:32:59 字數 1638 閱讀 7107

typedef函式指標的宣告與其他型別的宣告有所不同,主要遵守右左法則,具體的解釋如下:

1.1 解讀的原則---右左原則:

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

個人認為最開始應該是從需要定義的識別符號開始閱讀(當然有可能所有的需要定義的識別符號都是在圓括號內的),因為乙個宣告中可能有多個識別符號,但是未定義的識別符號永遠只有乙個。

注:函式的返回值不能是乙個陣列。陣列的元素型別必須一樣,同時他們占用的空間也必須一樣,所以陣列內不能存放函式。

通過以下的例子討論右左法則:

int (*func)(int *p) ;

首先找到未定義的識別符號,就是func,它的外面有一對圓括號,而且左邊是乙個*號,說明func是乙個指標,然後跳出這個圓括號,先看右邊,也是乙個圓括號,這說明(*func)是乙個函式,而func是乙個指向這類函式的指標,就是乙個函式指標,這類函式具有int*型別 的形參,返回值型別是int。

int (*func)(int *p, int (*f)(int*));

func被一對括號包含,且左邊有乙個*號,說明func是乙個指標,跳出括號,右邊有乙個括號,那麼func是乙個指向函式的指標,這類函式具有int *和int (*)(int *)這樣的形參,返回值為int型別,看一下func的形參int (*f)(int*),類似前面的解釋,f也是乙個函式指標,指向的函式具有int*型別的形參,返回值為int。

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

func右邊是乙個[ ]運算子,說明func是乙個具有5個元素的陣列,func左邊有乙個*,說明func的元素是指標,這裡的*是修飾func[5]而不是func的,應為運算子的優先順序比*高,所以func先與先結合。跳出這個括號,右邊也是一對圓括號,說明func陣列的元素是函式型別的指標,它所指向的函式具有int*型別的形參,返回值型別為int。

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

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

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

func是乙個函式指標,這類函式具有int*型別的形參,返回值是指向陣列的指標,所指向的陣列的元素是具有5個int元素的陣列。

要注意有些複雜指標宣告是非法的,例如:

int func(void) [5];

func是乙個返回值為具有5個int元素的陣列的函式。但c語言的函式返回值不能為陣列,這是因為如果允許函式返回值為陣列,那麼接收這個陣列的內容的東西,也必須是乙個陣列,但c語言的陣列名是乙個右值,它不能作為左值來接收另乙個陣列,因此函式返回值不能為陣列。

int func[5](void);

func是乙個具有5個元素的陣列,這個陣列的元素都是函式。這也是非法的,因為陣列的元素除了型別必須一樣外,每個元素所占用的記憶體空間也必須相同,顯然函式是無法達到這個要求的,即使函式的型別一樣,但函式所占用的空間通常是不相同的。

我見過最好的php偽靜態定義了

1.什麼是偽靜態?使用偽靜態的作用是什麼?定義 動態網頁通過重寫url的方法實現去掉動態網頁的引數,但在實際的網頁目錄中並沒有必要實現存在重寫的頁面。例如 我們當訪問位址時,6090148.html檔案是不存在的,也許只是乙個資料庫文章的id。為什麼要這樣做呢?1 增強url的友好性,方便使用者記憶...

我所見過的C IDE

vs系列 微軟的東西,很不錯的 dev c dev c 是乙個windows下的c和c 程式的整合開發環境。它使用mingw32 gcc編譯器,遵循c c 標準。開發環境包括多頁面視窗 工程編輯器以及偵錯程式等,在工程編輯器中集合了編輯器 編譯器 連線程式和執行程式,提供高亮度語法顯示的,以減少編輯...

我見過的給技術工程師的最好的寫作建議 轉貼

如何使技術工程師也能寫出清晰和簡潔的語句?以 新聞報道的文風加上技術報告的格式。在新聞報道裡,各段落都是以重要性先後排列的,所以讀者可以在任何乙個喪失興趣的段落停下來,他們知道最重要的部分都已經讀到,餘下未讀的不是那麼重要了。把你想要表達的意思用一句話寫出來。這就是你的標題。寫出 一段話闡述你的思想...