设为首页 加入收藏

TOP

C语言指向函数的指针
2019-09-25 11:17:41 】 浏览:52
Tags:语言 指向 函数 指针

定义形式:类型 (*指针变量名)(参数列表);
例如:int (*p)(int i,int j);

在这里 int是函数的返回类型,*p是指向函数的指针,(int i,int j);是函数的参数


注意 : int f(int i, int j);
int (
p)(int i, int j);
前者是返回值是指针的函数;后者是一个指向函数的指针。

示例1

#include <stdio.h>
 
#define  GET_MAX    0
#define  GET_MIN    1
 
int get_max(int i,int j)
{
    return i>j?i:j;
}
 
int get_min(int i,int j)
{
    return i>j?j:i;
}
 
int compare(int i,int j,int flag)
{
    int ret;
 
    //这里定义了一个函数指针,就可以根据传入的flag,灵活地决定其是指向求大数或求小数的函数
    //便于方便灵活地调用各类函数
    int (*p)(int,int);
 
    if(flag == GET_MAX)
    {
        p = get_max;
    }else{
        p = get_min;
    }
    ret = p(i,j);//或者ret =  (*p)(i,j);
    return ret;
}
 
int main()
{
    int i = 5,j = 10,ret;
    ret = compare(i,j,GET_MAX);
    printf("The MAX is %d\n",ret);
    ret = compare(i,j,GET_MIN);
    printf("The MIN is %d\n",ret);
    return 0 ;
}

示例2 函数指针作为参数

/**
    比较两个字符串,相等返回Equal,不相等返回Not Equal
**/
#include <stdio.h>
#include <string.h>
 
void check(char *a,char *b,int (*cmp)(const char *,const char *));
 
int main()
{
    char s1[80],s2[80];
    int (*p)(const char *,const char *);
 
    //将库函数strcmp的地址赋值给函数指针p
    p=strcmp;
 
    printf("请输入两个字符串.\n");
    gets(s1);
    gets(s2);
 
    check(s1,s2,p);
    return 0;
}
 
void check(char *a,char *b,int (*cmp)(const char *,const char *))
{
    printf("Testing for equality.\n");
    //表达式(*cmp)(a,b)调用strcmp,由cmp指向库函数strcmp(),由a和b作调用strcmp()的参数。
    //调用时,与声明的情况类似,必须在*cmp周围使用一对括号,使编译程序正确操作
    if((*cmp)(a,b)==0)
        printf("Equal\n");
    else
        printf("Not Equal\n");
}

示例3


#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
 
//check()函数的第3个函数是函数指针,就可以根据具体情况传入不同的处理函数
void check(char *a,char *b,int (*cmp)(const char *,const char *));
 
//自定义的比较两个字符串的函数
int compvalues(const char *a,const char *b);
 
int main()
{
    char s1[80],s2[80];
    printf("输入两个数字或自妇产\n");
    gets(s1);
    gets(s2);
    if(isdigit(*s1)){   //如果是数字,则用函数指针传入数字比较函数进行处理
        printf("Testing values for equality.\n");
        check(s1,s2,compvalues);
    }else{//如果是字符串,则用函数指针传入库函数strcmp进行处理
        printf("Testing strings for equality.\n");
        check(s1,s2,strcmp);
    }
}
 
void check(char *a,char *b,int (*cmp)(const char *,const char *))
{
    if((*cmp)(a,b)==0)
        printf("Equal.\n");
    else
        printf("Not Equal.\n");
}
 
int compvalues(const char *a,const char *b)
{
    if(atoi(a) == atoi(b))
        return 0;
    else
        return 1;
}
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C语言入门-循环 下一篇C语言实现封装、继承和多态

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目