当我遇到这种代码时,我正在阅读使用 pthreads.h
库进行线程编程的指南。不完全是这样,但问题在于 void *
指针取消引用。
#include <stdio.h>
void func(void * x) {
printf("%d\n", (int) x);
}
int main() {
int x = 10;
func((void *) x);
return 0;
}
为什么我只能用
(int) x
在 func
中取消引用 void *
指针?
我认为它必须是这样的:
* ((int *) x)
关于main函数中这行代码的类似问题:
func((void *) x);
我什至没有在这里得到 x
变量的地址。
最佳答案
在执行 (int) x
时,您没有取消引用 x
。您只需将一个指针(或多或少是一个地址)转换为一个 int
,它是一种数字表示形式,可以打印出来。
编辑:顺便说一句,将x
转换为有符号整数(int
) 应该会给您一个编译器警告。 更处理这个问题的正确方法是
printf("%p\n", x);
%p
是一种特殊的格式说明符,它将传递给printf
的东西解释为一个指针(地址说明符),以十六进制打印,这通常更有用在处理地址时。
EDIT2:顺便说一下,要取消引用 x
,您首先必须给它一个有意义的指针类型:
char a = *((char*)x);
会将 a
设置为存储在 p
包含的地址处的字符。
关于c - 取消引用 void 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29058473/