指標函式和函式指標有什麼區別
1,這兩個概念都是簡稱,指標函式是指帶指標的函式,即本質是乙個函式。我們知道函式都又返回型別(如果不返回值,則為無值型),只不過指標函式返回型別是某一型別的指標。其定義格式如下所示:
返回型別識別符號 *返回名稱(形式參數列)
返回型別可以是任何基本型別和復合型別。返回指標的函式的用途十分廣泛。事實上,每乙個函式,即使它不帶有返回某種型別的指標,它本身都有乙個入口位址,該位址相當於乙個指標。比如函式返回乙個整型值,實際上也相當於返回乙個指標變數的值,不過這時的變數是函式本身而已,而整個函式相當於乙個「變數」。例如下面乙個返回指標函式的例子:
#include
float *find();
main()
,,};
float *p;
int i,m;
printf("enter the number to be found:");
scanf("%d",&m);
printf("the score of no.%d are:\n",m);
p=find(score,m);
for(i=0;i<4;i++)
printf("%5.2f\t",*(p+i));
} float *find(float(*pionter)[4],int n)/*定義指標函式*/
學生學號從0號算起,函式find()被定義為指標函式,起形參pointer是指標指向包含4個元素的一維陣列的指標變數。pointer+1指向score的第一行。*(pointer+1)指向第一行的第0個元素。pt是乙個指標變數,它指向浮點型變數。main()函式中呼叫find()函式,將score陣列的首位址傳給pointer.
2,「函式指標」是指向函式的指標變數,因而「函式指標」本身首先應是指標變數,只不過該指標變數指向函式。這正如用指標變數可指向整型變數、字元型、陣列一樣,這裡是指向函式。如前所述,c在編譯時,每乙個函式都有乙個入口位址,該入口位址就是函式指標所指向的位址。有了指向函式的指標變數後,可用該指標變數呼叫函式,就如同用指標變數可引用其他型別變數一樣,在這些概念上一致的。函式指標有兩個用途:呼叫函式和做函式的引數。函式指標的說明方法為:
資料型別標誌符 (*指標變數名)(引數);注:函式括號中的引數可有可無,視情況而定。
下面的程式說明了函式指標呼叫函式的方法:
#include
int max(int x,int y)
void main()
ptr是指向函式的指標變數,所以可把函式max()賦給ptr作為ptr的值,即把max()的入口位址賦給ptr,以後就可以用ptr來呼叫該函式,實際上ptr和max都指向同乙個入口位址,不同就是ptr是乙個指標變數,不像函式名稱那樣是死的,它可以指向任何函式,就看你像怎麼做了。在程式中把哪個函式的位址賦給它,它就指向哪個函式。而後用指標變數呼叫它,因此可以先後指向不同的函式,不過注意,指向函式的指標變數沒有++和--運算,用時要小心。
轉載於
指標函式和函式指標有什麼區別
1,這兩個概念都是簡稱,指標函式是指帶指標的函式,即本質是乙個函式。我們知道函式都又返回型別 如果不返回值,則為無值型 只不過指標函式返回型別是某一型別的指標。其定義格式如下所示 返回型別識別符號 返回名稱 形式參數列 返回型別可以是任何基本型別和復合型別。返回指標的函式的用途十分廣泛。事實上,每乙...
指標函式和函式指標有什麼區別
指標函式和函式指標有什麼區別 1,這兩個概念都是簡稱,指標函式是指帶指標的函式,即本質是乙個函式。我們知道函式都又返回型別 如果不返回值,則為無值型 只不過指標函式返回型別是某一型別的指標。其定義格式如下所示 返回型別識別符號 返回名稱 形式參數列 返回型別可以是任何基本型別和復合型別。返回指標的函...
指標函式和函式指標有什麼區別
指標函式和函式指標有什麼區別 1,這兩個概念都是簡稱,指標函式是指帶指標的函式,即本質是乙個函式。我們知道函式都又返回型別 如果不返回值,則為無值型 只不過指標函式返回型別是某一型別的指標。其定義格式如下所示 返回型別識別符號 返回名稱 形式參數列 返回型別可以是任何基本型別和復合型別。返回指標的函...