c: при передаче по ссылке двойной первый указатель остается 0 - PullRequest
0 голосов
/ 02 февраля 2019

По какой-то причине ссылка на двойной указатель первых параметров всегда остается равной 0, хотя для второго параметра это кажется правильным.Что я делаю неправильно?Спасибо.

unsigned short GetData(unsigned char **pbAdr1, unsigned char **pbAdr2)
{
    printf("Data1: %x", par); //displays 6957f0 ==> OK
    *pbAdr1 = (unsigned char*)par;
    *pbAdr2 = (unsigned char*)par;
    printf("Data2: %x, %x", *pbAdr1, *pbAdr2 ); //displays 0, 6957f0 ==> why 0 for *pbAdr1?
}

1 Ответ

0 голосов
/ 02 февраля 2019

*pbAdr1 - указатель.Вы предоставляете указатель на аргумент %x для printf, который ожидает unsigned int и имеет неопределенное поведение .Код может «работать», если размер указателя такой же, как размер int, но не если они отличаются.

Я предлагаю вам использовать правильный спецификатор формата

printf("Data1: %p", (void*)par);
// . . .
printf("Data2: %p, %p", (void*)*pbAdr1, (void*)*pbAdr2 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...