c语言中函数指针
#include<stdio.h>
// 指针函数的使用
void fun1(void)
{
printf("我是第一个函数\n");
}
void fun2(void)
{
printf("我是第二个函数\n");
}
void fun3(void)
{
printf("我是第三个函数\n");
}
void fun4(void)
{
printf("我是第四个函数\n");
}
void fun5(void)
{
printf("我是第五个函数\n");
}
// 经过调试,得到以下结论
// 定义了一个函数指针变量数组 s[5]
// 类似于int* p; 要把int* 整体来看 属于一个数据类型
//因此int* p= 9; 说明把该指针变成了9,相当于int* p=NULL; p=9;
//要改变指针p所指向的内容,需要使用*p = 1; 这句话就说明内存地址为0x09的内容被写入数字1;
// 函数指针同理,s[5] 是存储函数指针的数组
//s[0] 表示fun1 依次类推
//(*s[0])() 表示执行该函数。
void (*s[5])(void) = { fun1, fun2, fun3, fun4, fun5 };
// 输出指针用%x
int main()
{
int a = 2;
int* p = &a;
// p = &a;
// *p = 3;
printf("指针p的值是:%x\n", p);
printf("a的值是:%d\n", a);
printf("a的地址是:%x\n", &a);
int i;
//定义了一个函数指针
void(*isr)(void)=NULL;
printf("函数的地址是:%x\n",fun1);
printf("函数的地址是:%x\n", fun2);
printf("函数的地址是:%x\n", fun3);
printf("函数的地址是:%x\n", fun4);
printf("函数的地址是:%x\n", fun5);
for (i = 0; i < 5; i++)
{
isr = s[i];
printf("这几个函数的地址为:%x\n", s[i]);
(*isr)();
(*s[i])();
}
}