c的函数指针

都说c语言的核心是函数,那么如何写一个函数?

  1. 确定函数功能,要求职责尽量单一
  2. 分析已知,未知(已知:参数,常量)
  3. 写出函数头
  4. 步骤分析(伪代码,或流程图)
  5. 编码
  6. 调试

main函数的参数:

int main(int argc, char * argv[])
main函数有两个参数,第一个表示输入的参数的个数,第二个表示输入参数(字符串)的地址。

../exe/test.o aaa bbb
执行这样的命令时 
argc = 0;
argv[0] 指向字符串 ../exe/test.o 的首地址
argv[1] ````````    aaa   ````````````

一直不太明白的 函数指针 ,今天也大概知道是怎么回事了。

函数指针 有两大作用:

  1. 将声明的函数指针作为结构体的成员(可以达到类似java类中的方法的作用)
  2. 作为函数的形参

函数指针声明与赋值

Type (*函数名)(T1 t, T2 t2 ...);
如: int (*pf)(int param);

Type (*pf)(int param) = NULL;
pf = func;// func为存在的函数名, 这种赋值更常用

示例代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

void sayAge(int age);

void checkAge(int age, int (*check)(int num));
int check(int num);//check的形参是被 checkAge定义好了的,因为 checkAge 作为一个可能通用的函数,在 check 之前已定义好,并且 checkAge 的逻辑是直接使用 check的返回值; 而被定义的 check 则是为了满足的ckeckAge 通用性,后期根据需要编写的必需要符合 checkAge 定义要求的一个 函数。并在使用时,通过函数指针传给 checkAge。 


//声明一个Person结构体
struct Person
{
    int age;
    void (*say)(int age); //使用函数指针,为Person声明一种说出age的行为
};

int main()
{
    struct Person p = {};
    p.age = 3;
    p.say = sayAge;
    p.say(p.age);

    checkAge(p.age, check);
    return 0;
}

void sayAge(int age)
{
    printf("age = %d\n", age );
}

void checkAge(int age, int (*check)(int num))
{
    if(1==check(age))
    {
        printf("YES\n");
    }else{
        printf("NO\n");
    }
}

int check(int num)
{
    return num < 18 ? 0 : 1;
}

猜你喜欢

转载自blog.csdn.net/weixin_37077950/article/details/81091229