2012-03-13 91 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;