Я публикую свой первый вопрос здесь после просмотра множества полезных обменов другими;это очень волнительно!Я думаю, что на этот вопрос будет довольно просто ответить, но я надеюсь, что кто-то может пролить свет на него, так как он меня раздражает.
У меня есть функция, которая принимает массив байтов, переданных в качестве байтового указателя, несколько уровней программы ниже.Переменная является членом класса, определенного как
m_GpsInputBuf[GpsInputBuflen];
Рассматриваемая функция получает указатель на этот массив, как показано в коде ниже.Функция просто сдвигает байты в массиве влево, когда контрольная сумма для пакета не проверена, и в теле пакета находится другой символ синхронизации для пакета данных.Все вопросы относительно цели функции в стороне, хотя, вопрос, который меня интересует, - это копирование временного массива в указатель байтового массива параметра.
Копирование в переменную pPacketbuf происходит так же, как я и надеялся, но когда функция завершается, переменная pPacketbuf, которая существует на уровне вызова функции ScanAndShift (), не затрагивается.Я полагаю, что это связано с аргументом, что ScanAndShift () является копией переменной указателя, но я слишком близок к проблеме, чтобы понять ее прямо сейчас.Любое понимание?Код ниже:
int CFlirPumpDlg::ScanAndShift(BYTE *pPacketbuf)
{
int idx3 = 0;
BYTE tempGpsInputBuf[GpsInputBuflen];
for(int idx = 1; idx < GpsInputBuflen; idx++)
{
if(pPacketbuf[idx] == CFlirPumpApp::GPS_Start)
{
idx3 = idx;
for(int idx2 = 0; idx2 < (GpsInputBuflen - idx); idx2++)
{
tempGpsInputBuf[idx2] = pPacketbuf[idx3++];
}
pPacketbuf = (BYTE *)&tempGpsInputBuf;
return (GpsInputBuflen - idx);
}
}
return 0;
}