#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
我的问题从上面的代码..
当我们将普通variables转换为void *或任何指针variables时会发生什么?
我们必须将variables的地址传递给函数,因为在函数定义参数中是指针variables。 但是这个代码传递了正常的variables..
在linux pthread编程中遵循这种格式…我是一个入门级的C程序员。 我正在编译这个程序在linux gcc编译器..
我只是在这里猜测,但我认为你应该做的是实际上将变量的地址传递给函数。 你使用操作符的地址来做到这一点
int x = 10; void *pointer = &x;
而在函数中,您可以使用反引用运算符*
来获得指针的值:
int y = *((int *) pointer);
请阅读为什么glib为这种转换提供宏,这里没有必要重复这个文本。 重点是:指针具有平台相关的大小。
如果你打算使用pthreads
并且你打算把pass函数pass
给pthread_create
,你必须malloc
/ free
你打算使用的参数(即使这个线程函数只需要一个int)。
使用整数地址(如&x
)可能是错误的,实际上每个修改你将在x
执行将影响pass
行为。