指標函式和函式指標
阿新 • • 發佈:2020-12-11
指標函式和函式指標
指標函式:
概念理解:
指標函式是指函式返回的型別是某型別的指標的函式。【大白話:“指標”是定語,修飾主語“函式”,所以指標函式就是一個函式,只不過返回的資料型別有點特殊,是個地址值】
宣告格式:
型別說明符 *函式名(引數)
int *f(int x,int y){
......
}
//這裡就是定義了一個返回值型別為指向整型變數的指標的函式,所以函式f就是一個指標函式
指標函式的呼叫:
int *p;
p=f(3,7);
//函式的返回值必須用同類型的指標變數來接收
函式指標:
概念理解:
在C語言中,一個函式總是佔用一段連續的記憶體區,而函式名就是該函式所佔記憶體的首地址。我們可以把函式的這個首地址(或稱入口地址)賦予一個指標變數,使該指標變數指向該函式。然後通過指標變數就可以找到並呼叫這個函式。我們把這種指向函式的指標變數稱為“函式指標變數”,也就是函式指標了。
宣告格式:
型別說明符(*指標變數名)();
int (*fptr)(); //宣告一個函式指標
函式指標的賦值:
fptr=&func
fptr=func
/*
上面兩種寫法都表示同一個意思,即將func函式的首地址賦值給指標fptr。這裡也可以省略&,因為單單一個函式名就代表著函式的首地址
*/
函式指標的呼叫:
int x; x=(*fptr)(); x=fptr(); /* 兩種寫法都對,如果函式指標所指的函式是需要傳遞引數的,需要在後面的括號裡寫上要傳遞的引數, 例如:x=fptr(引數1,引數2,......) */
函式指標的例子:
void A{
printf("A\n");
}
void B{
printf("B\n");
}
int main (){
void (*funcp)(); //定義一個函式指標
funcp=A; //把函式A的首地址賦值給函式指標funcp
(*funcp)(); //呼叫A這個函式,因為是void型,所以不需要引數來接收
funcp=B; //現在把函式B的首地址賦值給funcp
(*funcp)(); //呼叫函式B
}
//程式輸出的結果是:A (換行) B
下面用一個例子來實踐一下函式指標:
#include <stdio.h>
void printElement(int n) {
printf("%d ", n);
}
void TraverseLinkList(int p[5],void (*visit)(int m)) {
int n;
for (n = 0; n < 5; n++) {
visit(p[n]); //呼叫傳遞過來的函式
}
}
int main() {
int num[5] = { 2,4,6,8,10 }; //定義一個數組
void (*fpt)(int n); //定義一個函式指標變數
fpt = printElement; //讓這個指標指向printElement函式的首地址
TraverseLinkList(num,fpt);
return 0;
}
//程式輸出為:2 4 6 8 10
以上是個人在學習過程中的一些理解和記錄,如有錯誤,歡迎指正批評~~~
參考資訊來源:https://zhidao.baidu.com/question/95800995.html