Обработка адресов C ++ (указатели) - PullRequest
0 голосов
/ 12 марта 2012

Мне нужно отслеживать мое текущее местоположение в буфере данных (который будет использоваться в качестве пакета), поэтому я использую две переменные, bufferLoc и dataBuffer.

char dataBuffer[8192];
char** bufferLoc;

Я указываю на начальное местоположение dataBuffer с bufferLoc. Но увеличение bufferLoc не влияет на его физический адрес в памяти.

bufferLoc = (char**)&dataBuffer;

cout << &bufferLoc << endl;

bufferLoc++;

cout << &bufferLoc << endl;

Эти два отпечатка будут выводить одно и то же место. Моя ошибка связана с приведением типов, с самим bufferLoc или с чем-то совершенно другим?

Спасибо за вашу помощь.

Ответы [ 2 ]

2 голосов
/ 12 марта 2012

Если вы собираетесь сканировать через dataBuffer один байт за раз, тогда вторая переменная должна быть указателем, а не указателем на указатель.

char* bufferLoc;

затем распечатайте без амперсанда:

cout << (unsigned int *)bufferLoc << endl;

обратите внимание, что cout будет пытаться напечатать вашу переменную как текст, если вы не приведете к целому без знака *

0 голосов
/ 12 марта 2012

cout << &bufferLoc << endl;

печатает адрес bufferLoc. Этот адрес всегда один и тот же. Вы можете напечатать значение, хранящееся в bufferLoc:

cout << bufferLoc << endl;

изначально это значение является адресом dataBuffer, при увеличении его значение во втором операторе печати будет на 4 байта больше.

dataBuffer сам хранит указатель на массив char размером 8192 байта. Что вы хотите сделать, это получить это значение:

char *bufferLoc = dataBuffer;

и увеличьте это значение. Обратите внимание, что тип bufferLoc является указателем на массив символов (так же, как dataBuffer). После назначения адреса, сохраненного в dataBuffer, на bufferLoc, вы можете напечатать первый элемент: например: cout << bufferLoc[0] << end.

...