c的函式指標
阿新 • • 發佈:2018-11-06
都說c語言的核心是函式,那麼如何寫一個函式?
- 確定函式功能,要求職責儘量單一
- 分析已知,未知(已知:引數,常量)
- 寫出函式頭
- 步驟分析(虛擬碼,或流程圖)
- 編碼
- 除錯
main函式的引數:
int main(int argc, char * argv[])
main函式有兩個引數,第一個表示輸入的引數的個數,第二個表示輸入引數(字串)的地址。
../exe/test.o aaa bbb
執行這樣的命令時
argc = 0;
argv[0] 指向字串 ../exe/test.o 的首地址
argv[1] `` `````` aaa ````````````
一直不太明白的 函式指標 ,今天也大概知道是怎麼回事了。
函式指標 有兩大作用:
- 將宣告的函式指標作為結構體的成員(可以達到類似java類中的方法的作用)
- 作為函式的形參
函式指標宣告與賦值:
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;
}