我有一个无符号的c ++ char缓冲区
unsigned char* pBuffer = new unsigned char [1024];
我想通过使用assignement而不是memcpy来保存新分配的缓冲区的前几个字节中的pBuffer
指针,即
*(unsigned char*) &pBuffer[0] = pBuffer;
我无法使sytax正确。感谢帮助正确的语法来做到这一点。
Visual Studio 2010
答案 0 :(得分:3)
我不知道你为什么要这样做,但我可以想到一些奇怪的原因,所以:
reinterpret_cast<unsigned char**>(pBuffer)[0] = pBuffer;
您希望编译器将指针重新解释为unsigned char**
,并将pBuffer
的值存储在0索引槽中。
您说您正在使用多个pBuffers索引“链接列表”。在这种情况下,您不应使用 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
答案 1 :(得分:1)
怎么样:
*((unsigned char**) pBuffer) = pBuffer;
它将pBuffer
指针强制转换为指向char的指针,然后取消引用它,使其成为指向char的指针,然后为其分配pBuffer
指针。
如果我们这样写它可能会更容易理解:
unsigned char **ppBuffer = &pBuffer;
*ppBuffer = pbuffer;
答案 2 :(得分:0)
不确定为什么要这样做,但这适用于我的g++
编译器:
*(unsigned char**)pBuffer=pBuffer;