[C] wskaźniki, zagubiłem się

0

Mam taki oto kod:

// struktura z danymi
typedef struct  {
  unsigned int   id; 
  unsigned char  data[3];   
} s_data;

// bufor
struct buf_st {
  unsigned int in;      
  unsigned int out; 
  s_data buf[CRxBUF_SIZE]; 
};

static struct buf_st crxbuf = { 0, 0, };
#define SIO_CRxBUFLEN ((unsigned short)(crxbuf.in - crxbuf.out))


//funkcja ma ustawić wskaźnik na następny element w buforze
int PGet (s_data *pd) {
  struct buf_st *p = &crxbuf;

  if (SIO_CRxBUFLEN == 0)  //pusty bufor
      return (-1);


  pd =  &(p->buf [(p->out++) & (CRxBUF_SIZE - 1)]);
  return 0;
}

 

W main.c chce wyświetlić dane z bufora, tworze wskaźnik pdata i przekazuje go do funkcji PGet, jednak ta funkcja nie ustawia go poprawnie, mimo że wskaźnik pd wewnątrz działa poprawnie.
Jak należy wywołać funkcję PGet(pdata) czy tak PGet(&pdata) czy jeszcze inaczej ?

main.c:

s_data *pdata;

PGet(pdata);

//PGet(&pdata); -też nie działa

printf("%x %d %d %d \n", (*pdata).id, (*pdata).data[0], (*pdata).data[1], (*pdata).data[2]);
 
0

albo przez referencję:
int PGet (s_data *&pd) ;
(...)
PGet(pdata);

albo przez podwójny wskaźnik:

int PGet (s_data **pd) ;
(...)
PGet(&pdata);

w drugim wypadku będziez musiał pozmieniać trochę w ciele funkcji

//edit - sorry, nie zauważyłem, że to C, nie C++, referencja odpada

0

dziękuje, działa przez podwójny wskaźnik ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1