首页 > 解决方案 > 理解结构

问题描述

所以我了解 struct 的基础知识,或者我想。我们的老师今天贴了一些代码,并没有解释清楚。这是代码。

//declaring struct
struct params{
     int var;
     int var2;
     int var3;
};

//.c for function(part that matters)  
void *estimatepartial(void *info) {

     struct params *params = (struct params*) info;

我知道其余代码在做什么。我没见过

struct params *params = (struct params*) info;

从我记得之前。如果有人可以解释我这是做什么的,或者至少它叫什么,那么我可以查一下,我会很感激的。

我试过的:

标签: cstruct

解决方案


基本上你是 typecastingvoid pointer的指针类型struct params。您正在使用 void 指针,因为void指针可以保存任何类型的地址。但是您不能取消引用 void 指针,因此您需要将类型转换为实际类型。

例子:

您正在开发library为第三方应用程序提供功能并且您不想将定义共享struct param给应用程序。使用以下方法可以实现相同void pointer的目的。

void* createParams()
  {
     struct params *passStruct = malloc(sizeof(*passStruct));
     return (void  *)passStruct;
  }

并且应用程序调用此函数来创建Params结构。

   void *paramhandle = createParams();

然后paramhandle用来调用estimatepartial

estimatepartial(paramhandle);

使用void *你已经抽象了struct params.


推荐阅读