指標 三 函式與指標

2021-04-23 21:32:36 字數 1590 閱讀 1408

1、函式指標變數

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

函式指標變數定義的一般形式為:型別說明符 (*指標變數名)();

「型別說明符」表示被指函式的返回值型別。「(*指標變數名)」表示「*」後面的變數的定義的指標變數。最後的空括號表示指標變數所指的是乙個函式。括號裡面也可以帶引數,如果帶引數的話則引數型別應與被指函式的形參型別一致,引數個數也應相同。例如:

int max(int a,int b)

return a>b?a:b;

main()

int (*pmax_1)(),(*pmax_2)(int a,int b);/*定義函式指標變數*/

int x=19,y=20;

pmax_1=max;/*把被調函式的入口位址(函式名)賦予該函式指標變數*/

printf("max number is ",(*pmax_1)(x,y));/*用函式指標變數形式呼叫函式*/

pmax_2=max;

printf("max number is ",(*pmax_2)(x,y));

注意:a)、函式指標變數不能進行算術運算;

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

2、指標型函式

函式型別是指函式返回值的型別。在c語言中允許乙個函式的返回值是乙個指標(即位址),這種返回指標值的函式稱為指標型函式。

定義指標型函式的一般形式為:型別說明符 *函式名(形參表)

…… /*函式體*/

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

char *day_name(int n)

static char *name=;

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

main()

int i;

char *day_name(int n);   

printf("input day no:/n");

scanf("%d",&i);

if(i<0)exit(1);/*exit(1)表示發生錯誤後退出程式,exit(0)表示正常退出*/

printf("day no:%2d-->%s/n",i,day_name(i));

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

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

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

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

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

函式指標與指標函式

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

函式指標與指標函式

函式指標 在程式執行中,函式 是程式的演算法指令部分,它們和陣列一樣也占用儲存空間,都有相應的位址。可以使用指標變數指向陣列的首位址,也可以使用指標變數指向函式 的首位址,指向函式 首位址的指標變數稱為函式指標。1 函式指標定義 函式型別 指標變數名 形參列表 函式型別 說明函式的返回型別,由於 的...

函式指標與指標函式

函式指標 在程式執行中,函式 是程式的演算法指令部分,它們和陣列一樣也占用儲存空間,都有相應的位址。可以使用指標變數指向陣列的首位址,也可以使用指標變數指向函式 的首位址,指向函式 首位址的指標變數稱為函式指標。1 函式指標定義 函式型別 指標變數名 形參列表 函式型別 說明函式的返回型別,由於 的...