【问题标题】:Void Pointers Conversion in C [duplicate]C中的无效指针转换[重复]
【发布时间】:2018-10-13 21:38:54
【问题描述】:

我有一个函数会返回一个空指针。我需要将其转换为结构变量。例如结构是

struct book{
  char* name;
  int pages;
}

我已经为结构分配了一个本地指针,如下所示:

struct book* ptr;

该函数返回一个 void 指针,我需要将其转换为书本指针。我可以这样做吗?

ptr = function_name(); //void pointer returned

或者我是否必须在本地 void 指针中“捕获”返回的 void 指针,然后将其转换为 ptr

谢谢!

【问题讨论】:

  • 您的编译器是否抱怨分配?或者是什么引起了您的怀疑?
  • 嗯,我知道我需要将它转换为书本指针。但是,我也知道我不能像上面那样简单地分配值。我只是在寻找正确的语法,以便在函数调用后从 void 指针转换为书本指针。
  • C 标准说你可以分配它,是什么让你认为你不能?
  • 你为什么不尝试之前问这个问题!?

标签: c pointers struct


【解决方案1】:
struct book{
  char* name;
  int pages;
};

void* ptr 不需要显式转换。(尽管出于兼容性或编译器问题,您可能需要显式转换为
struct book* ptr = (struct book*)ptr = (struct book*)function_name();

struct book *ptr = function_name();

【讨论】:

  • 这不是必须的,void* 可以隐式转换为任何其他类型的指针
  • 这是一个不必要的演员阵容。只需直接分配给ptr,不需要演员表,也不应该提供。
  • 哪个“兼容性或编译器问题”?明确。
  • 为什么是... (struct book*)ptr ...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-28
  • 1970-01-01
  • 1970-01-01
  • 2019-11-29
  • 1970-01-01
  • 2016-06-01
  • 1970-01-01
相关资源
最近更新 更多