2012-03-13 90 views
0

我有一个无符号的C++字符缓冲区复制指针值C++

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

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

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

我无法获得sytax权利。用正确的语法来赞赏帮助。

Visual Studio 2010中

+1

使用std ::向量<性病::矢量<无符号字符>>。 – AlexTheo 2012-03-13 17:02:53

+0

您正在使用哪种编译器? – iammilind 2012-03-13 17:03:44

回答

3

我不知道你为什么会想这样做,但我不能想到几个古怪的原因,所以:

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

您希望编译器重新诠释指针作为unsigned char**,并存储值10在0-索引插槽中。

你说你是一个索引“链表”多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 
+1

工作,谢谢。我正在尝试使用多个pBuffers制作一个自定义的“链接列表”。 – user85917 2012-03-13 17:11:26

+1

@ user85917:这是_not_使用'reinterpret_cast'的情况之一。我添加了更多信息给我的答案。 – 2012-03-13 17:17:37

0

不知道你为什么这样做,但这个工程我g++编译:

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

如何:

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

它施放pBuffer指针的指针的指针为char,然后取消引用,要使它成为一个指针,然后分配一个char pBuffer指针。

,如果我们把它写这样可能更容易理解:

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