1. 程式人生 > >c的函式指標

c的函式指標

都說c語言的核心是函式,那麼如何寫一個函式?

  1. 確定函式功能,要求職責儘量單一
  2. 分析已知,未知(已知:引數,常量)
  3. 寫出函式頭
  4. 步驟分析(虛擬碼,或流程圖)
  5. 編碼
  6. 除錯

main函式的引數:

int main(int argc, char * argv[])
main函式有兩個引數,第一個表示輸入的引數的個數,第二個表示輸入引數(字串)的地址。

../exe/test.o aaa bbb
執行這樣的命令時 
argc = 0;
argv[0] 指向字串 ../exe/test.o 的首地址
argv[1] ``
`````` aaa ````````````

一直不太明白的 函式指標 ,今天也大概知道是怎麼回事了。

函式指標 有兩大作用:

  1. 將宣告的函式指標作為結構體的成員(可以達到類似java類中的方法的作用)
  2. 作為函式的形參

函式指標宣告與賦值

Type (*函式名)(T1 t, T2 t2 ...);
如: int (*pf)(int param);

Type (*pf)(int param) = NULL;
pf = func;// func為存在的函式名, 這種賦值更常用

示例程式碼:

#include<stdio.h>
#include<stdlib.h> #include<string.h> void sayAge(int age); void checkAge(int age, int (*check)(int num)); int check(int num);//check的形參是被 checkAge定義好了的,因為 checkAge 作為一個可能通用的函式,在 check 之前已定義好,並且 checkAge 的邏輯是直接使用 check的返回值; 而被定義的 check 則是為了滿足的ckeckAge 通用性,後期根據需要編寫的必需要符合 checkAge 定義要求的一個 函式。並在使用時,通過函式指標傳給 checkAge。
//宣告一個Person結構體 struct Person { int age; void (*say)(int age); //使用函式指標,為Person宣告一種說出age的行為 }; int main() { struct Person p = {}; p.age = 3; p.say = sayAge; p.say(p.age); checkAge(p.age, check); return 0; } void sayAge(int age) { printf("age = %d\n", age ); } void checkAge(int age, int (*check)(int num)) { if(1==check(age)) { printf("YES\n"); }else{ printf("NO\n"); } } int check(int num) { return num < 18 ? 0 : 1; }