скопировать значение указателя c ++ - PullRequest
0 голосов
/ 13 марта 2012

У меня есть неподписанный буфер символов c ++

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

Я хочу сохранить указатель pBuffer в первых нескольких байтах вновь выделенного буфера, используя назначение, а не memcpy, т.е.

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

Я не могу правильно понять синтаксис.Оцените помощь с правильным синтаксисом для этого.

Visual Studio 2010

Ответы [ 3 ]

3 голосов
/ 13 марта 2012

Я не знаю, почему вы хотели бы сделать это, но я могу придумать несколько странных причин, поэтому:

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 голос
/ 13 марта 2012

Как насчет:

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

Он приводит указатель pBuffer к указателю на указатель на символ и затем разыменовывает его, чтобы сделать его указателем на символ, которому затем назначается pBuffer указатель.

Может быть легче понять, если мы напишем это так:

unsigned char **ppBuffer = &pBuffer;
*ppBuffer = pbuffer;
0 голосов
/ 13 марта 2012

Не знаю, зачем вы это делаете, но это работает с моим g++ компилятором:

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