接上一篇
Dev c++ C语言实现第一个 dll 动态链接库 创建与调用-CSDN博客
有一行代码不懂
typedef void (*func)(double a, double b, double c[], double* aplusb); // 填调用的输入参数
这里查找资料
C语言指针进阶(一)——深入详解“函数指针”与“指针函数”-CSDN博客
对typedef的真正理解_typedef等同于class吗-CSDN博客
typedef特殊用法:typedef void* (*fun)(void*)_typedef void *-CSDN博客
得到结论:来每一次产生一个指针,都要写一堆参数,而typedef 定义之后,可以一个词结束战斗
但是先跑下面的代码,复制粘贴运行,对比一下即可验证
//类似于指针选择变量,
//只不过指针变量原来是换不同的变量存东西,
//现在是换不同的函数执行相同的数据
#include <windows.h>
#include <iostream>
using namespace std;
// 简单函数
void mk(int m)
{
cout<<m<<endl;
}
// 相同的参数
void mkv2(int n)
{
for(int i=0; i<7; i++)
{
cout<<n;
}
cout<<"mkv2"<<endl;
}
// 一个函数
void him(int old)
{
cout<<"age:"<<old<<endl;
}
// 另一个函数
void she(int young)
{
cout<<"high"<<young<<endl;
}
int main()
{
typedef void (*Myfun)(int n); // 声明函数指针, 函数返回值的类型是 void,类型名是“Myfun”,指针需要的参数是一个 int 型数据。
Myfun kk; // 声明一个函数指针;
kk=&mk; // 这个函数指针拿mk 当替身
mk(9); // 测试数据
kk(8);
kk=&mkv2; // 这个函数指针拿mkv2 当替身
kk(9); // 测试数据
mkv2(8);
cout<<endl;
void (*me)(int n) = &mk; // 声明一个人,人名叫 me ,现在这个人也有个叫 mk的替身;
me(9);
mk(8);
me = kk; // 替身在拥有替身的人之间是通用的
me(9);
kk(8);
cout<<endl;
me = &him; // 我的替身
me(99);
me = &she; // 我的替身
me(99999);
void (*myteacher)(int age)=&him; // 我的老师
myteacher(100);
//可以看到,原来每一次产生一个指针,都要写一堆参数,而typedef 定义之后,可以一个词结束战斗
return 0;
}