指针数组里面放函数地址,当地址为NULL时应该写(void*)NULL吗
时间: 2024-03-09 20:49:18 浏览: 127
不一定需要写成`(void*)NULL`,因为C语言中NULL通常被定义为0或者((void*)0),所以直接写NULL即可。但是为了代码的可读性,可以在需要强制转换的地方显示地将NULL转换为(void*)类型。例如:
```
void (*func_ptr[10])(int); // 定义一个指针数组,存放函数指针
func_ptr[0] = (void (*)(int))NULL; // 将第一个元素置为空指针
```
注意,这里的强制转换是必要的,因为在C语言中,NULL的类型是(void*),而函数指针的类型是void (*)(int),二者类型不同,需要进行强制转换才能相容。
相关问题
指针数组里面放函数地址,当地址为NULL时应该写(unsigned char*)NULL吗,如果不行,请给出理由解释,并给出正确写法
在指针数组中存储函数地址时,应该使用NULL而不是(unsigned char*)NULL。因为NULL是一个预定义的宏,它通常被定义为零,表示指针不指向任何有效的内存地址。而(unsigned char*)NULL则是将NULL强制转换为unsigned char*类型,这样做是不必要的,也是不标准的写法。
正确的写法如下:
```
void (*func_ptr_array[])() = {func1, func2, NULL};
```
其中,func1和func2是函数指针,NULL表示指针数组的结尾。
指针数组中存储函数地址的例子举例
下面是一个简单的例子,演示了如何在指针数组中存储函数地址:
```c
#include <stdio.h>
void func1() {
printf("This is function 1.\n");
}
void func2() {
printf("This is function 2.\n");
}
int main() {
void (*func_ptr_array[])() = {func1, func2, NULL};
int i;
for (i = 0; func_ptr_array[i] != NULL; i++) {
(*func_ptr_array[i])();
}
return 0;
}
```
该程序定义了两个函数func1和func2,然后声明了一个指针数组func_ptr_array,其中存储了func1和func2的地址,以及一个NULL指针,表示指针数组的结尾。
在主函数中,使用for循环遍历func_ptr_array数组,调用每个函数。由于数组以NULL结尾,循环会在遇到NULL时结束。运行程序,输出如下:
```
This is function 1.
This is function 2.
```
阅读全文