大多數時候,宣告很容易閱讀,但是很難讀取一些涉及函式指標的宣告,
例如,考慮“ signal.h”中的以下宣告,
void(*bsd_signal(int, void(*)(int)))(int);
讓我們看看讀取復雜宣告的步驟:
1) 將C宣告轉換為后綴格式,并從右向左讀取,
2) 要將運算式轉換為后綴,請從最里面的括號開始,如果不存在最里面的括號,則從宣告名稱開始,然后右移,第一次遇到結尾括號時,請向左走,決議完整個括號后,便會從括號中出來,
3)繼續直到決議完完整的宣告,
讓我們從簡單的例子開始,
1) int(*fp) ();
讓我們將上面的運算式轉換為后綴格式,對于上面的示例,沒有最里面的括號,因此,我們將列印宣告名稱,即“ fp”,下一步是轉到運算式的右側,但是“ fp”的右側沒有要決議的內容,這就是為什么轉到左側,在左側,我們找到了“ *”,現在列印了“ *”,并且沒有括號,我們將獲得如下的后綴運算式,
fp *()int
現在從左到右讀取后綴運算式,例如fp是指向回傳int的函式的指標
讓我們看看更多示例,
2) int(*daytab)[13]
后綴:daytab * [13] int
含義:daytab是指向13個整數的陣列的指標,
3) void(*f[10]) (int, int)
后綴:f [10] *(int,int)void
含義:f是10個指向函式的指標的陣列(該函式需要2個int型別的引數),回傳void
4) char(*(*x())[]) ()
后綴:x()* [] *()char
含義:x是一個回傳指向指向回傳char的指標的陣列的函式
5) char(*(*x[3])())[5]
后綴:x [3] *()* [5] char
含義:x是3個指向函式的指標的陣列,回傳5個char的陣列的指標
6) int*(*(*arr[5])()) ()
后綴:arr [5] *()*()* int
含義:arr是5個指向函式的指標的陣列,回傳指向函式的指標,回傳指向整數的指標
7) void(*bsd_signal(intsig, void(*func)(int)))(int);
后綴:bsd_signal(int sig,void(* func)(int))*(int)void
含義:bsd_signal是一個使用整數和指向該函式的指標的函式(該函式以整數作為引數并回傳void)并回傳指向一個函式(以整數為引數并回傳void)
希望對大家有幫助,以上為本期分享內容!
另外如果你想更好的提升你的編程能力,學好C語言C++編程!彎道超車,快人一步!
C語言C++編程學習交流圈子,QQ群1030652847【點擊進入】微信公眾號:C語言編程學習基地
分享(原始碼、專案實戰視頻、專案筆記,基礎入門教程)
歡迎轉行和學習編程的伙伴,利用更多的資料學習成長比自己琢磨更快哦!
編程學習書籍分享:

編程學習視頻分享:

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/211539.html
標籤:C
