函数指针

函数指针:

指向该函数的指针

首先区别一下函数名与数组名的区别:

复制代码
copy
#include <stdio.h>
int Add(int x, int y)
{
    return x + y;
}
int main()
{

    printf("%p\n", &Add);
    printf("%p\n", Add);
    return 0;
}
复制代码

根据以上代码得出

  • 数组名 != &数组名
  •  函数名 = &函数名

这里简单的测试下

复制代码
copy
#include <stdio.h>
int Add(int x, int y)
{
    return x + y;
}
int main()
{
    int a = 10;
    int b = 10;
    Add(a, b);
  int (*pf)(int, int) = Add;//pf====Add
    int ret = pf(3, 5);
    printf("%d\n", ret);return 0;
}
复制代码

一些特殊代码的解读

1.

copy
(*( void(*)())0)();
  1. 调用0地址处的函数
  2.  该函数无参,返回类型是void
  3.   void(*)()--函数指针类形
  4.  .(void(*)())0--对0进行强制类型转换,被解释为一个函数的地址
  5.  *(void(*)())0--对0地址进行了解引用操作
  6.  (*(void(*)())0)()--调用了地址处的函数

    //--<<c陷阱和缺陷>>

2.

copy
void (*signal(int, void(*)(int)))(int);
  1. signal和()先结合,说明signal是函数名
  2.  signal函数的第一个参数的类形是int,第二个的类形是函数指针该函数指针,指向一个参数为int,返回类形是void的函数
  3.  signal函数的返回类型也是一个函数指针,该函数指针,指向一个参数为int,返回类形是void的函数

代码优化

copy
typedef void(*pfun_t)(int);//对void(*)(int)的函数指针类形重命名为pfun_t
    pfun_t signal(int, pfun_t);

 

posted @   卡卡罗特kk  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
展开