将void指针强制转换为struct-pointer(在函数调用中)

时间:2013-12-25 14:22:45

标签: c pointers struct void-pointers

我有一个头文件,(我们称之为gen.h),其中包含以下行:

typedef void* pNode;
SampleFunction(PNode node); /* just a function for example*/

现在,假设我有另一个源文件(part.c),它包含以下结构:

typdef struct _OBJ* POBJ;
typdef struct _OBJ
{
    double xi;
    double xf;
    double yi;
    double yf;
    int key;
} 

我想发送一个指向struct(PBOJ)的指针作为函数的参数(比如说SampleFunction),它希望得到一个指向void类型的指针(pNode);那我该怎么做?

2 个答案:

答案 0 :(得分:0)

下面的代码只是一个简单的示例,所以我没有写入init,delete等等。

struct _OBJ
{
  double xi;
  double xf;
  double yi;
  double yf;
  int key;
}; 

typedef struct _OBJ* POBJ;

typedef void* pNode;

void SampleFunction(pNode node)
{
  //null check  
  if(node == NULL)
  {
    //error
  }

  //Do Something
  // ...

}; /* just a function for example*/

int main()
{
  POBJ obj = new _OBJ;
  SampleFunction((pNode)obj);
  delete obj;
}

答案 1 :(得分:0)

您只需将其PNode转换为void*,因为&可以安全地指向任何其他类型。

由于PBOJ是指向_OBJ的指针,因此您可以在没有POBJ Ptr; SampleFunction((PNode)Ptr); // or SampleFunction((void *)Ptr); 运算符的情况下直接转换它

{{1}}