https://www.bilibili.com/video/BV1vb411m7JV 文章目录 第6天 函数指针的定义 函数指针的应用 函数指针数组 回调函数 - 多态 预处理
https://www.bilibili.com/video/BV1vb411m7JV
文章目录
- 第6天
- 函数指针的定义
- 函数指针的应用
- 函数指针数组
- 回调函数 - 多态
- 预处理
- 生成日志
第6天
void(*func[4])() = {add, minus, multi, divide}; // 函数指针数组func[i]();
函数指针的定义
指向函数的指针。定义有三种方式:
int func(int data)
{
printf("a=%d\n", data);
return 0;
}
int main()
{
// 1. 先定义函数类型,根据类型定义指针变量
typedef int FUN(int data); // FUN 函数类型
FUN* p1 = NULL; // 函数指针变量
p1 = &func; // p1 指向 func 函数
func(1); // 传统调用方法
p1(6); // 函数指针调用方法
// 2. 先定义函数指针类型,根据类型定义指针变量
typedef int(*PFUN)(int); // 函数指针类型
PFUN p2 = func;
p2(7);
// 3. 直接定义函数指针 !!!!!!!
int(*p3)(int) = func;
p3(8);
int(*p4)(int);
p4 = func;
p4(9);
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
*/
回调函数 - 多态
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可以包括.c或者.h文件。
TEST(1+1, 2) 1+1*2
void fun()
{
// 定义了宏定义,下面的代码都可以用,类似全局变量
}
void test()
{
int a = A; //ok
// 取消宏定义
int a = A; //err
}
int main()
{
printf("1");
printf("0");
}
// 1
生成日志
int main()
{
printf("file= %s\nline= %d", __FILE__, __LINE__);
// file= D:\C_project\BV1vb411m7JV\tmp\main.c
// line= 7
}