指針函數:返回指針類型的函數,定義方法以下:函數
類型標識符 *函數名(參數列表)spa
函數指針:指向函數入口地址的指針,定義方法以下:指針
類型標識符 (*指針名稱)(形參列表)code
下面咱們經過一段代碼加深咱們的理解:blog
//指針函數,和函數指針 #include <stdio.h>//引入 輸入輸出功能 文件頭 //定義一個函數指針 char* (*fun)(char* str,char* str_search); //實現一個字符串查找的功能 void input(char *str,char *str_search) { printf("請輸入字符串:"); gets(str);//獲取輸入字符串 printf("請輸入查找字符:"); gets(str_search);//獲取輸入字符串 } //獲取字符串長度 int str_length(char * str) { //字符串結尾符號是 \0 int i = 0; while(str[i] != '\0') i++; return i; } //查找字符串,返回子字符串後面的字符 char* str_search(char *str,char *str_search) { int length1 = str_length(str); int length2 = str_length(str_search); for(int i =0;i<length1-length2+1;i++) { bool flag = true; for(int j = 0;j<length2;j++) { if(str[i+j] != str_search[j]) { j = 0; flag = false; break; } } if(flag) { return str+i;; } } return NULL; } void print(char* str) { if(str!=NULL) { printf("查找成功:%s\n",str); }else { printf("未找到!\n"); } } //主函數 int main() { //定義變量 char str[50],str_sub[50]; char *str_result; printf("直接調用函數:\n"); input(str,str_sub); str_result = str_search(str,str_sub); print(str_result); printf("使用指針函數調用:\n"); input(str,str_sub); fun = str_search; str_result = fun(str,str_sub); print(str_result); return 0; }
其中 char* str_search(char *str,char *str_search) 就是指針函數, char* (*fun)(char* str,char* str_search) 就是函數指針字符串