【问题标题】:copy pointer value c++复制指针值c ++
【发布时间】:2012-03-13 16:59:53
【问题描述】:

我有一个无符号 c++ 字符缓冲区

unsigned char* pBuffer =  new unsigned char [1024];

我想通过使用赋值而不是 memcpy-ie 将 pBuffer 指针保存在新分配缓冲区的前几个字节中

*(unsigned char*) &pBuffer[0] = pBuffer;

我无法获得正确的语法。感谢有关执行此操作的正确语法的帮助。

Visual Studio 2010

【问题讨论】:

  • 使用 std::vector >.
  • 你使用的是哪个编译器?

标签: c++ buffer variable-assignment arrays


【解决方案1】:

我不知道你为什么要这样做,但我能想到一些奇怪的原因,所以:

reinterpret_cast<unsigned char**>(pBuffer)[0] = pBuffer;

您希望编译器将指针重新解释为 unsigned char**,并将 pBuffer 的值存储在 0-index 槽中。

您说您正在索引具有多个 pBuffer 的“链表”。在这种情况下,您不应该使用 reinterpret_cast。而是:

struct node {
     node* prev;
     std::unique_ptr<node> next;
     unsigned char buffer[1024];
     node(node* prev_) : prev(prev_) {}
};

std::unique_ptr<node> list(new node(nullptr)); //tada

【讨论】:

  • 成功了,谢谢。我正在尝试使用多个 pBuffer 制作自定义“链接列表”。
  • @user85917:这不是使用reinterpret_cast的情况之一。我在答案中添加了更多信息。
【解决方案2】:

怎么样:

*((unsigned char**) pBuffer) = pBuffer;

它将pBuffer 指针转换为指向char 指针的指针,然后取消引用以使其成为指向char 的指针,然后分配pBuffer 指针。

这样写可能更容易理解:

unsigned char **ppBuffer = &pBuffer;
*ppBuffer = pbuffer;

【讨论】:

    【解决方案3】:

    不知道你为什么要这样做,但这适用于我的 g++ 编译器:

    *(unsigned char**)pBuffer=pBuffer;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多