您的位置:首页 > 新闻 > 会展 > C语言,void类型,函数指针 void (*isr)(void) = NULL

C语言,void类型,函数指针 void (*isr)(void) = NULL

2025/1/9 14:47:04 来源:https://blog.csdn.net/rjszcb/article/details/141057845  浏览:    关键词:C语言,void类型,函数指针 void (*isr)(void) = NULL

*一、C语言,void类型,函数指针 void (isr)(void) = NULL

void (*) (void) 表示一个数据类型,和int、char的作用类似,这里的类型是函数指针,函数没有入参也没有返回值。

(void (*) (void)) 是强制类型转换,就像 (int)、(char)一样,这里是强制转换为函数指针类型。

(void (*) (void))0 是把0强制转换为函数指针类型,就是内存地址0开始的数据是一个函数。

二、定义这么一个isr函数指针,数据类型是void,这样,可以指向任何函数。

void (*isr)(void) = NULL;

三、编程实例
1、

char fun1(char *s, int i);int fun2(char s[], int i);char* fun3(char *s, int i);

2、

void intc_setaddr(unsigned long intnum, unsigned long vicaddr[]void (*handler)(void))//hander是个void类型
{unsigned long  P = vicaddr;*(P + i) = (unsigned)handler;
}3、
```c
void irq_handler(void)
{int i=0;   void (*isr)(void) = NULL;//unsigned long vicaddr1[3] = {fun1,fun2,fun3};for(i=0; i<3; i++){isr = (void (*)(void)) vicaddr1[i];//强制类型转换成 void (*)(void) (*isr)();		// 通过函数指针来调用函数}
//unsigned long vicaddr2[3];intc_setaddr(0,vicaddr2,fun1);intc_setaddr(1,vicaddr2,fun2);intc_setaddr(2,vicaddr2,fun3);for(i=0; i<3; i++){isr = (void (*)(void)) vicaddr2[i];//强制类型转换成 void (*)(void) (*isr)();		// 通过函数指针来调用函数}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com