【问题标题】:Can I assign void* pointer to char* pointer?我可以将 void* 指针分配给 char* 指针吗?
【发布时间】:2015-01-15 19:36:32
【问题描述】:

我正在编码重新实现malloc 函数。我看到一个男人的示例代码,其中有一些像这样的奇怪代码

struct s_block{
   size_t size;    // size per block
   int free;       // whether free flag exist
   t_block pre;
   t_block next;
   void *magic_ptr;
   int padding;    // bytes for padding
   char data[1];   // first byte of data, i.e. the address returned from malloc
};

typedef struct s_block *t_block;
t_block get_block(void *p) {
   char *tmp;  
   tmp = p;
   ...
}

但我使用 gcc 或 g++ 编译此代码,错误是“不能使用 void* 指向 char* 指针的指针”。 我想知道问题出在哪里? gcc 还是 g++ ?代码错误?

【问题讨论】:

    标签: c++ pointers void-pointers


    【解决方案1】:

    这是有效的 C 代码,您得到的错误来自(更严格的)C++ 标准。如果您想在 C++ 中编译它,只需将指针显式转换为 char *

    【讨论】:

      【解决方案2】:

      在 C++ 中,您必须将 void* 显式转换为另一种类型:

      char *tmp = static_cast<char*>(p);
      

      在 C 中情况并非如此,您可以将 void* 分配给任何指针类型而无需强制转换。

      【讨论】:

        【解决方案3】:

        您必须使用显式转换将void* 转换为任何其他指针,而其他方式是隐式的。

        char* temp = static_cast<char*> (p);
        

        这里要注意的一点是,您的初始指针(目前由 void* 表示)应该是 char* 类型以避免任何问题。

        【讨论】:

          猜你喜欢
          • 2014-05-13
          • 1970-01-01
          • 2011-04-02
          • 2013-12-10
          • 2020-12-31
          • 1970-01-01
          • 2018-10-06
          • 1970-01-01
          • 2023-03-26
          相关资源
          最近更新 更多