就我声明一个函数指针时所读到的,没有分配到左侧或右侧。但是我在C源文件中有许多函数指针,并且所有函数都在下面的赋值形式中使用:
void (*pbindRemoveDev)( zAddrType_t *Addr ) = (void*)NULL;
任何人都可以帮我理解(void *)NULL部分吗?
这是一个嵌入式代码。
答案 0 :(得分:5)
中没有作业
void (*pbindRemoveDev)( zAddrType_t *Addr ) = (void*)NULL;
正在将函数指针pbindRemoveDev
初始化为NULL
。以下是作业
void RemoveDev( zAddrType_t *Addr );
pbindRemoveDev = RemoveDev // Assignment
答案 1 :(得分:2)
这就像:
int a;
但这里的类型是:
void (*)(zAddrType_t*)
是的,你可以做int a = 0;
答案 2 :(得分:1)
这是一个函数指针声明。您的代码将其初始化为NULL。
void (*pbindRemoveDev)( zAddrType_t *Addr ) = (void*)NULL;
不知道你正在使用的编译器,正确的初始化可能是
void (*pbindRemoveDev)( zAddrType_t *Addr ) = NULL;
如果调用函数指针,它将崩溃,因为您指向的是NULL内存地址。
下面是函数指针初始化示例:
#include <stdio.h>
void bar(int x)
{
printf( "%d\n", x );
}
int main()
{
void (*foo)(int) = &bar;
foo(10); //This prints 10.
return 0;
}