函数指针<>

函数指针:

(1)、函数指针指向的是函数而非对象;和其他指针一样,函数指针指向某种特定的类型;

(2)、函数的类型由他的返回类型和参数类型决定,与函数名无关

函数指针的声明方法:

返回值类型 (*指针变量名)([形参列表]

返回值类型说明的是函数的返回值类型,指针变量名中的括号不能省略,后面的形参列表表示指针变量所指向的函数所带的参数列表。

例子:

int func(int x);//声明一个函数
int (*f)(int x);//声明一个函数指针
f=func;
f=&func;//以上两种方法都可以将函数的地址赋给函数指针,赋值时函数func不带括号,也不带餐还是,由于func 代表函数的首地址,因此经过复制之后f 就指向函数func(x)的代码的首地址。
#include<stdio.h>

int max(int x,int y){return (x>y?x:y);}

int main()
{
    int (*ptr)(int,int);//声明一个函数指针
    int a,b,c ;
    ptr=max;
    scanf("%d%d",&a,&b);
    c=ptr(a,b);//此处相当于c=max(a,b)
    printf("%d,%d,%d",a,b,c);
    return 0;
}

ptr是指向函数的指针变量,所以可以把含糊max()赋给ptr作为ptr 的值,实际上ptr和max都指向一个入口地址,不同的是ptr 作为一个指针变量,它可以指向任何一个同类型的函数,但是函数只能表示一种。在程序中用函数指针只想那个函数他就代表那个函数,然后就可以使用指针调用它。注意指向函数的指针没有++和–的操作,用的时候要格外注意

函数指针还有另一种使用方法,根据编译器的不同使用不同的方式进行使用:

1.定义函数指针类型

typedef int (*func)(int ,int);

2.声明变量并赋值

int max(int a,int b){return (x>y?x:y);}
func max_func=max;//这样使用的话我们就可以定义很多同类型但是不同命的函数指针

例子:

#include<atdio.h>
void FileFunc()
{
    printf("FileFunc()");
}
void EditFunc()
{
    printf("EditFunc()");
}

void main()
{
    typedef void (*funcp)();
    funcp pfun=FileFunc;
    pfun();//此时应该输出FileFunc()
    pFun=EditFunc;
    pfun();//此时应该输出EditFunc()
}

函数指针和指针函数的区别:

1、指针函数:返回值是指针的函数,本质是一个函数;函数指针:是一个指向相应类型函数的指针。

函数指针数组:数组元素都是函数指针的数组

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值