函数指针定义及其使用以及typedef大用处

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

int add(int x, int y)
{
    return x + y;
}
void print1(char* str)
{
    printf("%s",str);
}
int main() 
{
    //理解函数指针
    int a = 10;
    int b = 20;
    char ch[] = "string";
    int ret=add(a, b);
    printf("%d",ret);//正常方法
    //使用函数指针,函数名  或者  &函数名  都表示函数的地址
    int(*p)(int, int)=add;// p为函数指针  
    printf("%d", (*p)(a,b));//使用:*p对函数指针解引用得到函数名,然后使用
    void(*pc)(char*) = print1;//  pc为函数指针
     (*pc)(ch);
    return 0;
}

在对函数指针使用时有以下写法:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

int add(int x, int y)
{
    return x + y;
}
int main()
{
    int(*p)(int, int) = add;
    printf("%d\n", (*p)(3, 4));
    printf("%d\n", p(3, 4));
    printf("%d\n", (***p)(3, 4));
    return 0;
}

运行结果如下: 

 发现无论p前面有几个*都得到一样的结论!

《C陷阱和缺陷》 :

 

 void(      *signal(  int,   void(*)(int)    )    )(int);//1 看起来太复杂用typedef关键字重定义下
     typedef unsigned int  uint;//将unsigned int 定义为uint
    // typedef  void(*)(int) vpint;//这种方法是错误的!!!!
     typedef void(*vpint)(int);//正确方法
     //于是1处复杂的可写为
     vpint(  signal(int, vpint)  );

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值