(1)指針函數其實就是一個簡稱,是指帶指針的函數,它本質是一個函數,隻是傳回值是某種類型的指針:
類型辨別符 *函數名 (參數表)
(2)函數指針,本質上就是一個指針。隻是它指向的不是一般的變量,而是一個函數。因為每一個函數都有一個入口位址,函數指針指向的就是函數的入口位址。格式:
類型辨別符 (*指針變量名)(形參清單)
一段代碼:
#include <stdio.h>
char* (*fun)(char *str,char *substr);
void input (char *str,char *substr)
{
printf("請輸入字元串:");
gets(str);
printf("請輸入要搜尋的字元串:");
gets(substr);
}
int strlen(char *str)
{
int i=0;
while(str[i]!='\0')i++;
return i;
}
char* serch_str(char *str,char *serch_str)
{
int i,j,k;
k=strlen(str)-strlen(serch_str);
if(k>0&&NULL!=str&&NULL!=serch_str)
{
for(i=0;i<=k;i++)
{
for(j=i;str[j]==serch_str[j-i];j++)
{
if(serch_str[j-i+1]=='\0')
{
return str+i+strlen(serch_str);
}
}
}
}
return NULL;
}
void print(char* ret_str)
{
if(ret_str!=NULL)
printf("所搜尋字元串之後的字元為%s\n",ret_str);
else
printf("沒有找到所要的字元串\n");
}
int main()
{
char str1[50],str2[50];
char serch_str1[50],serch_str2[50];
char* ret_str1,*ret_str2;
input(str1,serch_str1);
ret_str1=serch_str(str1,serch_str1);
printf("直接調用函數serch_str()\n");
print(ret_str1);
input(str2,serch_str2);
fun=serch_str;
ret_str2=fun(str2,serch_str2);
printf("使用函數指針fun調用函數serch_str()\n");
print(ret_str2);
return 0;
}