函數名稱與函數指標等價
C 中的函數名稱既充當函數指示符又充當函數指針,為引用函數提供了方便的簡寫。這種等價性一直存在爭議,其基本原理在於歷史考量和簡化函數指標使用的願望。
C90 基本原理文件解釋了函數指示符可以以多種形式使用,包括作為函數呼叫(都與且沒有星號運算子)和函數指標。這種靈活性允許各種語法結構,其中一些可能看起來不尋常。
例如,考慮以下聲明:
int f(); int (*pf)();
這裡,函數名稱 f 可以呼叫為 f( )、*f() 甚至 ***f()。此外,函數指標 pf 可以透過類似的方式調用,例如 pf()、*pf() 或 **pf()。
這種等價的基本原理源自於簡化使用的願望函數指標。在許多情況下,直接使用函數名稱作為函數指標比手動套用取址運算子 (&) 更方便。因此,該語言允許函數名和函數指標的等價。
但是,這種等價僅限於某些上下文。傳回函數類型時,函數類型本身不能隱含地轉換為指向自身的指標。下面的範例對此進行了說明:
typedef bool FunctionType(int); FunctionType h(); // Error!
在這種情況下,h() 被宣告為傳回函數類型的函數,但這不能隱式轉換為指向該函數類型的指標。但是,當用作參數時,函數類型可以隱式轉換為指向自身的指標。
FunctionType g(FunctionType); // Implicitly converted to void g(FunctionType *)
這種隱式轉換簡化了函數指標作為參數的傳遞。總的來說,函數名稱和函數指標的等價是一種平衡便利性和上下文限制的設計選擇,使其成為 C 程式設計中的實用功能。
以上是為什麼 C 中函數名稱和函數指標是等效的?的詳細內容。更多資訊請關注PHP中文網其他相關文章!