c/c++ 指針函數 和 函數指針

 

指針函數:返回指針類型的函數,定義方法以下:函數

類型標識符 *函數名(參數列表)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) 就是函數指針字符串

相關文章
相關標籤/搜索