当前位置 : 主页 > 编程语言 > java >

【C 语言提高、进阶】Day 6

来源:互联网 收集:自由互联 发布时间:2022-06-23
​​https://www.bilibili.com/video/BV1vb411m7JV​​ 文章目录 ​​第6天​​ ​​函数指针的定义​​ ​​函数指针的应用​​ ​​函数指针数组​​ ​​回调函数 - 多态​​ ​​预处理​​

​​https://www.bilibili.com/video/BV1vb411m7JV​​


文章目录

  • ​​第6天​​
  • ​​函数指针的定义​​
  • ​​函数指针的应用​​
  • ​​函数指针数组​​
  • ​​回调函数 - 多态​​
  • ​​预处理​​
  • ​​生成日志​​

第6天

void(*func[4])() = {add, minus, multi, divide}; // 函数指针数组
func[i]();

函数指针的定义

指向函数的指针。定义有三种方式:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define c 0

int func(int data)
{
printf("a=%d\n", data);
return 0;
}

int main()
{
#ifdef a
// 1. 先定义函数类型,根据类型定义指针变量
typedef int FUN(int data); // FUN 函数类型
FUN* p1 = NULL; // 函数指针变量
p1 = &func; // p1 指向 func 函数
func(1); // 传统调用方法
p1(6); // 函数指针调用方法
#endif
#ifdef b
// 2. 先定义函数指针类型,根据类型定义指针变量
typedef int(*PFUN)(int); // 函数指针类型
PFUN p2 = func;
p2(7);
#endif
#ifdef c
// 3. 直接定义函数指针 !!!!!!!
int(*p3)(int) = func;
p3(8);
int(*p4)(int);
p4 = func;
p4(9);
#endif

return 0;

}

函数指针的应用

函数指针数组

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

void add()
{
printf("add func\n");
}

void minus()
{
printf("minus func\n");
}

void multi()
{
printf("multi func\n");
}

void divide()
{
printf("divide func\n");
}

int main()
{
// void(*func)() = add;
// func();
void(*func[4])() = {add, minus, multi, divide}; // 函数指针数组
// char *buf[] = {"add", "minus", "multi", "divide"}; // 指针数组
for(int i = 0; i < 4; i++)
{
func[i]();
}
return 0;
}
/*
add func
minus func
multi func
divide func
*/

回调函数 - 多态

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

int function(int a, int _)
{
return a;
}
int add(int a, int b)
{
return a + b;
}
int minus(int a, int b)
{
return a - b;
}
void func(int x, int y, int(*p)(int, int))
{
int a = p(x, y);
printf("%d\n", a);
}
int main()
{
func(1, 2, add);
func(10, 5, minus); // 多态
func(-1, NULL, function);
return 0;
}

预处理

  • #include
  • #define
  • #ifdenf … #endif
  • 一些特殊作用的预定义宏
  • 理论上#include可以包括.c或者.h文件。

    #define PI 3.1415
    #define TEST(a, b) a*b
    TEST(1+1, 2) 1+1*2
    #define TEST(a, b)(a)*(b)

    void fun()
    {
    #define A 10 // 定义了宏定义,下面的代码都可以用,类似全局变量
    }
    void test()
    {
    int a = A; //ok
    // 取消宏定义
    #undef A
    int a = A; //err
    }#define MAX2(a, b) (a) > (b) ? (a) : (b)
    #deinfe MAX3(a, b, c) (a) > (MAX2(b, c)) ? (a) : (MAX(b, c))#include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #define test 0

    int main()
    {
    #ifdef test
    printf("1");
    #else
    printf("0");
    #endif
    }
    // 1

    生成日志

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

    int main()
    {
    printf("file= %s\nline= %d", __FILE__, __LINE__);
    // file= D:\C_project\BV1vb411m7JV\tmp\main.c
    // line= 7

    }


    【本文来源:韩国服务器 https://www.68idc.cn欢迎留下您的宝贵建议】
    上一篇:【C 语言提高、进阶】Day 5
    下一篇:没有了
    网友评论