Domanda Problema struct e puntatori

Stato
Discussione chiusa ad ulteriori risposte.

CrashTest

Utente Gold
29 Dicembre 2013
584
36
208
309
Salve ragazzi,
leggendo un manuale ho incontrato questo codice e non riesco a capire una cosa:
Codice:
typedef struct CStashTag {
  int size;      // dimensione di ogni elemento
int quantity; // numero di elementi allocati
  int next;     // indice del primo elemento vuoto
 
 // array di byte allocato dinamicamente: 

  unsigned char* storage;
} CStash;

void initialize(CStash* s, int size);
int add(CStash* s, const void* element);
e nelle implementazioni delle funzioni c'è:
Codice:
void initialize(CStash* s, int sz) {
  s->size = sz;
  s->quantity = 0;
  s->storage = 0;
  s->next = 0;
}

int add(CStash* s, const void* element) {
  if(s->next >= s->quantity) // E’ rimasto spazio sufficiente?
inflate(s, increment);
  // Copia dell’elemento nell’allocazione,
// partendo dal primo elemento vuoto:
int startBytes = s->next * s->size;
  unsigned char* e = (unsigned char*)element;
  for(int i = 0; i < s->size; i++)
    s->storage[startBytes + i] = e[i];
  s->next++;
  return(s->next - 1);
// numero d’indice
}
in pratica con riesco a capire che puntatore è questo passato alla funzione: CStash* s
e non riesco a capire perchè dopo nel programma usa sempre ' s '. Se non mi sono spiegato bene ditemelo :)
Grazie per l'aiuto
-CrashTest
 
Ultima modifica:
Nella funzione inizialitze viene passato un indirizzo che solo da un puntatore può essere gestito.
Dato che l'indirizzo si riferisce a una struttura dati di tipo CStash ,secondo l'aritmetica dei puntatori il puntatore deve essere dello stesso TIPO del dato da gestire: in questo caso è stato definito un nuovo tipo di dato attraverso il tyedef che è CSTASH(Quindi il puntatore nei parametri deve essere di tipo Cstash)

Poi nella funzione troviamo ad esempio s->size che equivale a dire (*)s.size (se non ricordo male), il * viene omesso per questo motivo dato che c'è la freccia
Quindi non fai altri che puntare all'attributo della struttura


Essendo usato il typedef volendo si puo' passare direttamente nella funzione una variabile cstash senza l'uso di puntatori


Inviato dal mio LG-D802 utilizzando Tapatalk
 
Stato
Discussione chiusa ad ulteriori risposte.