學習第26天
阿新 • • 發佈:2020-09-15
C語言
-
函式指標變數呼叫函式、
-
函式在編譯時系統會給函式分配一個入口地址、也稱為 函式的指標(地址)、
-
有地址便可定義一個指標變數指向該函式、然後可以通過指標變數呼叫該函式、
-
函式在執行時會佔用一段記憶體單元、有一個起始地址、有地址就可以用一個指標變數指向一個函式、從而通過指標變數呼叫、
-
函式名代表函式的的入口地址、
-
函式指標不能指向函式中間的某一條語句、
-
函式指標變數定義——資料型別識別符號(*指標變數名)(形參列表);
-
資料型別識別符號=函式的返回型別、
-
可以通過函式指標指向不同的函式、來呼叫不同的函式、
-
函式呼叫不僅可以通過函式名呼叫也可以使用函式指標呼叫、指向函式的指標不能做運算、
-
int max(int a, int b) { if (a > b) return a; return b; } int main() { int c; int (*e)(int a, int b);//定義函式指標變數、 /*注意!!! int *e(int a, int b);這樣就成函式宣告、括號優先順序高、所以變成int* 變成了函式的返回值型別、 可以寫成int (*e)(int , int );只保留型別、*/ e = max;//將函式入口地址賦值給e、e和max的地址是不相同的、max不是真正的函式地址、 c =(*e)(19,39);//e地址是真正的函式地址、但列印地址、時、列印的時c的地址、 //c = max(9, 18);//常規函式呼叫、 printf("c=%d\n", c); }
-
-
把指向函式的指標變數作為函式引數、
-
int max1(int a, int b) { if (a > b) return a; return b; } int max2( int a, int b, int(*c)(int a, int b)//形參就是函式指標、 ) { int d = c(a, b);//呼叫、函式指標c所指向的函式、 return d; } int main() { int e; e = max2(30, 29,max1); printf("e=%d\n", e); int (*f)(int, int);//定義函式指標變數 f = max1; e = max2(3, 59, max1); printf("e=%d\n", e); }
-
-
返回指標值的函式、
-
int d;//解決5行出現的問題、定義全域性變數、這樣記憶體就不會被釋放、可以一直使用、 int* a(int b, int c) { int d = b + c; return &d;//!!!有風險、因為d在a函式呼叫完後會將d的的記憶體釋放、所以、會出現錯誤、 } int main() { int *e; e = a(4, 8); printf("合是%d\n",*e);
-