天天看點

c語言 指針函數 函數指針

(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;
}
           

繼續閱讀