函式指標和指標函式區別

2021-08-25 20:03:45 字數 1884 閱讀 4212

1 函式指標變數

在c語言中,乙個函式總是占用一段連續的記憶體區,而函式名就是該函式所佔記憶體區的首位址。我們可以把函式的這個首位址(或稱入口位址)賦予乙個指標變數,使該指標變數指向該函式。然後通過指標變數就可以找到並呼叫這個函式。我們把這種指向函式的指標變數稱為"函式指標變數"。

函式指標變數定義的一般形式為:

型別說明符 (*指標變數名)();

其中"型別說明符"表示被指函式的返回值的型別。"(* 指標變數名)"表示"*"後面的變數是定義的指標變數。最後的空括號表示指標變數所指的是乙個函式。

例如:int (*pf)();

表示pf是乙個指向函式入口的指標變數,該函式的返回值(函式值)是整型。

【例】本例用來說明用指標形式實現對函式呼叫的方法。

int max(int a,int b)

main()

從上述程式可以看出用,函式指標變數形式呼叫函式的步驟如下:

1) 先定義函式指標變數,如後一程式中第9行 int (*pmax)();定義 pmax為函式指標變數。

2) 把被調函式的入口位址(函式名)賦予該函式指標變數,如程式中第11行 pmax=max;

3) 用函式指標變數形式呼叫函式,如程式第14行 z=(*pmax)(x,y);

4) 呼叫函式的一般形式為:

(*指標變數名) (實參表)

使用函式指標變數還應注意以下兩點:

a) 函式指標變數不能進行算術運算,這是與陣列指標變數不同的。陣列指標變數加減乙個整數可使指標移動指向後面或前面的陣列元素,而函式指標的移動是毫無意義的。

b) 函式呼叫中"(*指標變數名)"的兩邊的括號不可少,其中的*不應該理解為求值運算,在此處它只是一種表示符號。

2 指標型函式

前面我們介紹過,所謂函式型別是指函式返回值的型別。在c語言中允許乙個函式的返回值是乙個指標(即位址),這種返回指標值的函式稱為指標型函式。

定義指標型函式的一般形式為:

型別說明符 *函式名(形參表)

其中函式名之前加了"*"號表明這是乙個指標型函式,即返回值是乙個指標。型別說明符表示了返回的指標值所指向的資料型別。

如:int *ap(int x,int y)

表示ap是乙個返回指標值的指標型函式,它返回的指標指向乙個整型變數。

【例】本程式是通過指標函式,輸入乙個1~7之間的整數,輸出對應的星期名。

main()

char *day_name(int n);

return((n<1||n>7) ? name[0] : name[n]);

}本例中定義了乙個指標型函式day_name,它的返回值指向乙個字串。該函式中定義了乙個靜態指標陣列name。name陣列初始化賦值為八個字串,分別表示各個星期名及出錯提示。形參n表示與星期名所對應的整數。在主函式中,把輸入的整數i作為實參,在printf語句中呼叫day_name函式並把i值傳送給形參n。day_name函式中的return語句包含乙個條件表示式,n值若大於7或小於1則把name[0]指標返回主函式輸出出錯提示字串"illegal day"。否則返回主函式輸出對應的星期名。主函式中的第7行是個條件語句,其語義是,如輸入為負數(i<0)則中止程式執行退出程式。exit是乙個庫函式,exit(1)表示發生錯誤後退出程式,exit(0)表示正常退出。

應該特別注意的是函式指標變數和指標型函式這兩者在寫法和意義上的區別。如int(*p)()和int *p()是兩個完全不同的量。

int (*p)()是乙個變數說明,說明p是乙個指向函式入口的指標變數,該函式的返回值是整型量,(*p)的兩邊的括號不能少。

int *p()則不是變數說明而是函式說明,說明p是乙個指標型函式,其返回值是乙個指向整型量的指標,*p兩邊沒有括號。作為函式說明,在括號內最好寫入形式引數,這樣便於與變數說明區別。

對於指標型函式定義,int *p()只是函式頭部分,一般還應該有函式體部分。

函式指標和指標函式 區別

一 在學習arm過程中發現這 指標函式 與 函式指標 容易搞錯,所以今天,我自己想一次把它搞清楚,找了一些資料,首先它們之間的定義 1 指標函式是指帶指標的函式,即本質是乙個函式。函式返回型別是某一型別的指標 型別識別符號 函式名 參數列 int f x y 首先它是乙個函式,只不過這個函式的返回值...

指標函式和函式指標的區別

1,這兩個概念都是簡稱,指標函式是指帶指標的函式,即本質是乙個函式。我們知道函式都又有返回型別 如果不 返回值,則為無值型 只不過指標函式返回型別是某一型別的指標。其定義格式如下所示 返回型別 識別符號 返回名稱 形式參數列 返回型別可以是任何基本型別和復合型別。返回指標的函式的用途十分廣泛。事實上...

函式指標和指標函式的區別

1.指標函式 int f inta,intb 此函式有返回值,返回值為int 即返回值是指標型別的。首先它是乙個函式,只不過這個函式的返回值是乙個位址值。函式返回值必須用同型別的指標變數來接受,也就是說指標函式一定有函式返回值,而且在主調函式中,函式返回值必須賦給同型別的指標變數。讓指標標誌 與in...