学习c语言的函数指针

学习函数指针

函数是地址,所以是可以用一个指针去指向这个地址的.当然刚开始使用函数指针的时候,感觉是很怪异的.多用几次就好了,要有一个适应的过程.

如何声明一个函数指针

#include <stdio.h>

//函数声明
int add(int a,int b);

int add(int a,int b)
{
	return a + b;
}

int main(int agc,char *argv[])
{
	//如何声明一个函数指针,假设要接收add的函数的指针
	//1. 先写出接收的函数声明,改一下函数名
	//int calc(int a,int b);
	//2. 用括号将函数名
	//int (calc)(int a,int b);
	//3. 既然函数指针,是一个指针,在函数名加*号是少不了的
	int (*calc)(int a,int b);
	
	calc = add;
	
	int sum = calc(10,20);
	printf("sum=%d\n",sum);
	return 0;
}

函数指针作为参数使用

#include <stdio.h>

int add(int a,int b);
int sub(int a,int b);

//函数指针作为参数
int calc(int (*fp)(int a,int b),int a,int b);

int add (int a,int b)
{
	return a + b;
}

int sub(int a,int b)
{
	return a - b;
}

int calc(int (* fp)(int a,int b),int a,int b)
{
	return (fp)(a,b);
}

int main(int argc,char *argv[])
{
	int a,b;
	printf("请输入两个数(10 20)\n");
	scanf("%d %d",&a,&b);
	
	//将函数指针作为参数传入函数
	printf("调用add函数结果:%d\n",calc(add,a,b));
	printf("调用sub函数结果:%d\n",calc(sub,a,b));
	return 0;
}

运行效果

函数指针作为参数使用

函数指针作为返回类型

#include <stdio.h>

//函数声明
int add(int a,int b);
int sub(int a,int b);

//函数声明,有三个参数,一个函数指针,剩下两个是int类型的参数
int calc(int (*fp)(int a,int b),int a,int b);

//函数指针作为函数的返回类型使用
//函数声明,返回一个有2个参数函数指针,参数为char类型
int (*selected(char c))(int a,int b);

int add(int a,int b)
{
    return a + b;
}

int sub(int a,int b)
{
    return a - b;
}

int calc(int (*fp)(int a,int b),int a,int b)
{
    return (*fp)(a,b);
}


int (*selected(char c))(int a,int b)
{
    switch(c)
    {
        case '+': return add;
        case '-': return sub;
    }
}


int main(int argc, const char * argv[])
{
    printf("输入一个计算(10+20)\n");
    int a,b;
    char c;
    int (*pf)(int ,int);
    scanf("%d %c %d",&a,&c,&b);
    
    pf = selected(c);
    int sum = pf(a,b);
    printf("%d %c %d = %d\n",a,c,b,sum);
    return 0;
}

运行效果

函数指针作为函数的返回类型使用
秋风 2017-12-10