10
#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. 当我们将普通变量类型转换为 void* 或任何指针变量时会发生什么?

  2. 我们必须将变量的地址传递给函数,因为在函数定义中,参数是指针变量。但是这段代码传递了普通变量..

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

4

3 回答 3

11

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

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

在函数中,您可以使用取消引用运算符获取指针的值*

int y = *((int *) pointer);
于 2013-04-15T13:53:10.777 回答
0

如果您打算使用pthreads并且打算将pass函数传递给pthread_create,则必须malloc/free您打算使用的参数(即使线程函数只需要一个 int )。

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

于 2013-04-15T14:01:10.287 回答
0

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

于 2013-04-15T14:00:47.183 回答