函数指针的认知

函数指针

定义:可以理解为函数的地址,要知道函数名就是地址的概念,相当于数组名就是数组首元素地址
如何定义函数指针:int (*p)(int a,int b);
如何调用:(*p)(a,b);
简单示例:演示函数指针的定义,指向地址,调用

#include <stdio.h>
#include <stdlib.h>

void Printf_Hello()
    {
		printf("Hello world\n");
    
    }

int main()
{
	
    void (*p)();//定义的函数指针变量
    p = Printf_Hello;//指向函数,函数名就是地址
    (*p)();//函数指针的调用
    
	
	system("pause");
	return 0;
}

带返回值的demo

#include <stdio.h>
#include <stdlib.h>

int inReturn(int data)
    {
		return ++data;
    
    }

int main()
{
	int mark;
	int (*p)(int data);//定义一个函数指针变量
    p = inReturn;//指向函数,函数名就是地址
    
    mark = (*p)(10); //调用
    printf("return mark:%d\n",mark );
     
	
	system("pause");
	return 0;
}

作用之处

根据程序运行的过程中的不同情况,调用不同的函数
demo:有两个整数,由用户输入1,2或者3。如输入1,程序就给出a和b中的大者,输入2就给出a和b中的小者,输入3就给出a与b之和。
实现方法1:

#include <stdio.h>
#include <stdlib.h>



int main()
{
	int a;
    int b;
    int mark;

    printf("Input a:\n");
    scanf("%d",&a);
	printf("Input b:\n");
    scanf("%d",&b);
 while(1){
    printf("Input mark:\n");
    scanf("%d",&mark);
    
	switch(mark){
        case 1:
			if(a>b){
				printf("Max:%d\n",a);
            }else{
				printf("Max:%d\n",b);
            }
			break;
            
        case 2:
			if(a<b){
				printf("Min:%d\n",a);
            }else{
				printf("Min:%d\n",b);
            }
			break;
         case 3:
			printf("sum:%d\n",a+b);
			break;
    }
    }
	system("pause");
	return 0;
}

用函数指针实现

#include <stdio.h>
#include <stdlib.h>

int getMax(int data1,int data2)
    {
		return data1>data2 ? data1:data2;
    }
int getMin(int data1,int data2)
    {
		return data1<data2 ? data1:data2;
    }    
int getSum(int data1,int data2)
    {
		return data1+data2;
    }    



int DataHandler(int data1,int data2,int (*pfunc)(int data1,int data2))
    {
		int ret;
        ret = (*pfunc)(data1,data2);
		return ret;
    }

int main()
{
	int a = 1;
    int b = 2;
    int cmd;
    int ret;
    
	int (*pfunc)(int data1,int data2);
    while(1){
	printf("1:getMax  2:getMin  3:getSum\n");
    scanf("%d",&cmd);
	switch(cmd){
		case 1:
			pfunc = getMax;
			break;
        case 2:
			pfunc = getMin;
            break;
        case 3:
			pfunc = getSum;
            break;
        default:
			printf("输入错误\n");
            exit(-1);
            break;
    }
    ret = DataHandler(a,b,pfunc);
    printf("ret:%d\n",ret);

    } 
	system("pause");
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值