searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

函数指针和指针函数的嵌套

2023-07-14 07:14:07
4
0
  1. 函数指针

    函数指针本质上是个指针,他指向的是一个函数地址,例如

    void (*f)(int);​

    定义了指针f,f指向的函数接收整型参数,返回为空。

  2. 指针函数

    指针函数比较简单,本质上是个函数,他的返回值是个指针

  3. 嵌套

    假设定义了如下函数

    void add1(int n) {
        n = n + 1;
        printf("added %d\n", n);
    }
     
    void (*f(int a, int b))(int) {
        printf("add a and b: %d\n", a + b);
        return &add1;
    }

    第一个函数是两数相加的简单函数定义。        

    第二个定义,f是一个函数,它接收两个整型参数,然后返回是一个函数指针,如果换一个形式可能会更清晰一点:

     

    void (*)(int) f(int a, int b) {
        printf("add a and b: %d\n", a + b);
        return &add1;
    }​

    完整代码示例:

    #include <stdio.h>
    #include <unistd.h>
    #include <stdlib.h>
    #include <string.h>
     
    void add1(int n) {
        n = n + 1;
        printf("added %d\n", n);
    }
     
    void (*f(int a, int b))(int) {
        printf("add a and b: %d\n", a + b);
        return &add1;
    }
     
    int main()
    {
        (*f(1,2))(10);
    }

    代码中定义了函数f,返回函数指针,因此调用方式为:(*f(1,2))(10);

    执行结果:

  4. 实际示例

linux中信号处理函数的定义就是这种形式

void (*signal(int signum, void (*handler)(int)))(int);

或者

typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
0条评论
0 / 1000
范****国
2文章数
0粉丝数
范****国
2 文章 | 0 粉丝
范****国
2文章数
0粉丝数
范****国
2 文章 | 0 粉丝
原创

函数指针和指针函数的嵌套

2023-07-14 07:14:07
4
0
  1. 函数指针

    函数指针本质上是个指针,他指向的是一个函数地址,例如

    void (*f)(int);​

    定义了指针f,f指向的函数接收整型参数,返回为空。

  2. 指针函数

    指针函数比较简单,本质上是个函数,他的返回值是个指针

  3. 嵌套

    假设定义了如下函数

    void add1(int n) {
        n = n + 1;
        printf("added %d\n", n);
    }
     
    void (*f(int a, int b))(int) {
        printf("add a and b: %d\n", a + b);
        return &add1;
    }

    第一个函数是两数相加的简单函数定义。        

    第二个定义,f是一个函数,它接收两个整型参数,然后返回是一个函数指针,如果换一个形式可能会更清晰一点:

     

    void (*)(int) f(int a, int b) {
        printf("add a and b: %d\n", a + b);
        return &add1;
    }​

    完整代码示例:

    #include <stdio.h>
    #include <unistd.h>
    #include <stdlib.h>
    #include <string.h>
     
    void add1(int n) {
        n = n + 1;
        printf("added %d\n", n);
    }
     
    void (*f(int a, int b))(int) {
        printf("add a and b: %d\n", a + b);
        return &add1;
    }
     
    int main()
    {
        (*f(1,2))(10);
    }

    代码中定义了函数f,返回函数指针,因此调用方式为:(*f(1,2))(10);

    执行结果:

  4. 实际示例

linux中信号处理函数的定义就是这种形式

void (*signal(int signum, void (*handler)(int)))(int);

或者

typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
0
0