指針函數

指針函數

指針函數是一個函數。函數都有返回類型(如果不返回值,則為無值型),只不過指針函數返回類型是某一類型的指針。

定義


首先它是一個函數,只不過這個函數的返回值是一個地址值。函數返回值必須用同類型的指針變數來接受,也就是說,指針函數一定有“函數返回值”,而且,在主調函數中,函數返回值必須賦給同類型的指針變數。

定義格式


類型名 * 函數名( 函數參數列表);
其中,後綴運算符括弧“()”表示這是一個函數,其前綴運算符星號“*”表示此函數為指針型函數,其函數值為指針,即它帶回來的值的類型為指針,當調用這個函數后,將得到一個“指向返回值為…的指針(地址),“類型名”表示函數返回的指針指向的類型”。
“( 函數參數列表)”中的括弧為函數調用運算符,在調用語句中,即使函數不帶參數,其參數表的一對括弧也不能省略。其示例如下:
int *pfun(int, int);
由於“*”的優先順序低於“()”的優先順序,因而pfun首先和後面的“()”結合,也就意味著,pfun是一個函數。即:
int *(pfun(int, int));
接著再和前面的“*”結合,說明這個函數的返回值是一個指針。由於前面還有一個int,也就是說,pfun是一個返回值為整型指針的函數。
返回類型可以是任何基本類型和複合類型。返回指針的函數的用途十分廣泛。事實上,每一個函數,即使它不帶有返回某種類型的指針,它本身都有一個入口地址,該地址相當於一個指針。比如函數返回一個整型值,實際上也相當於返回一個指針變數的值,不過這時的變數是函數本身而已,而整個函數相當於一個“變數”。例如下面一個返回指針函數的例子:
共有三個學生的成績,函數find()被定義為指針函數,其形參pointer是指針指向包含4個元素的一維數組的指針變數。pointer+n指向score的第n+1行。*(pointer+1)指向第一行的第0個元素。pt是一個指針變數,它指向浮點型變數。main()函數中調用find()函數,將score數組的首地址傳給pointer.

注意


指針函數不同於函數指針, int (*f)(int a);或者char (*f1)(void);
函數指針聲明為指針,它與變數指針不同之處是,它不是指向變數,而是指向函數。所以一定要注意
函數指針有兩個用途:調用函數和做函數的參數.