将整型转换为void *

#include <stdio.h> void pass(void* ); int main() { int x; x = 10; pass((void*)x); return 0; } void pass(void* x) { int y = (int)x; printf("%d\n", y); } output: 10 

我的问题从上面的代码..

  1. 当我们将普通variables转换为void *或任何指针variables时会发生什么?

  2. 我们必须将variables的地址传递给函数,因为在函数定义参数中是指针variables。 但是这个代码传递了正常的variables..

在linux pthread编程中遵循这种格式…我是一个入门级的C程序员。 我正在编译这个程序在linux gcc编译器..

我只是在这里猜测,但我认为你应该做的是实际上将变量的地址传递给函数。 你使用操作符的地址来做到这一点

 int x = 10; void *pointer = &x; 

而在函数中,您可以使用反引用运算符*来获得指针的值:

 int y = *((int *) pointer); 

请阅读为什么glib为这种转换提供宏,这里没有必要重复这个文本。 重点是:指针具有平台相关的大小。

如果你打算使用pthreads并且你打算把pass函数passpthread_create ,你必须malloc / free你打算使用的参数(即使这个线程函数只需要一个int)。

使用整数地址(如&x )可能是错误的,实际上每个修改你将在x执行将影响pass行为。