(void(*0))和NULL区别
时间: 2024-01-26 19:02:26 浏览: 183
`(void(*0))` 是一个类型为 `void (*)()` 的指针,它指向一个函数,但是这个指针指向的地址是空指针,也就是说它不指向任何函数。而 `NULL` 是一个宏定义,它在 C 语言中表示空指针常量,通常被定义为 `(void*)0` 或者 `0`。因此,`(void(*0))` 和 `NULL` 的区别在于,前者是一个指向空地址的函数指针,而后者是一个空指针常量。
相关问题
void* p = (void*)0; void* tmp = NULL; tmp = &i; printf("i = %d tmp = %p\n", i, tmp); *(void**)tmp = p; printf("i = %d tmp = %p\n", i, tmp); p = tmp; printf("p = %p\n", p); 翻译这段代码
这段代码主要是对指针的操作,具体翻译如下:
```C
void* p = (void*)0; // 定义一个 void 类型的指针变量 p,初始化为 0
void* tmp = NULL; // 定义一个 void 类型的指针变量 tmp,初始化为 NULL
tmp = &i; // 将变量 i 的地址赋值给 tmp
printf("i = %d tmp = %p\n", i, tmp); // 输出 i 的值和 tmp 的地址
*(void**)tmp = p; // 将 p 的地址赋值给 tmp 指向的指针变量(强制类型转换为 void** 类型)
printf("i = %d tmp = %p\n", i, tmp); // 输出 i 的值和 tmp 的地址
p = tmp; // 将 tmp 的值赋给 p
printf("p = %p\n", p); // 输出 p 的地址
```
这段代码的作用是将指针变量 tmp 指向的地址中的指针变量赋值为指针变量 p 的地址,然后将指针变量 p 的地址赋值给变量 tmp,最终输出指针变量 p 的地址。
void *p = NULL; int a = 3; 怎么将a的值复制给*p
可以通过将指针 `p` 指向变量 `a` 的地址,然后使用解引用操作符 `*` 来将 `a` 的值赋值给 `p`。
示例代码如下:
```
void *p = NULL;
int a = 3;
p = &a; // 将指针p指向变量a的地址
*p = a; // 通过解引用操作符将a的值赋值给p
```
需要注意的是,此时 `p` 的类型为 `void*`,无法直接进行解引用操作,需要先转换为对应类型的指针才能进行操作。
阅读全文