Dubbio su passaggio di puntatore a struttura

Messaggioda Summerwind78 » 25/09/2018, 08:45

Ciao a tutti


durante un'intensa sessione di programmazione mi è sorto un dubbio amletico su il passaggio di un puntatore in C

Premetto che sto lavorando con il compilatore C18 della microchip

io ho una struttura

Codice:
typedef struct {
   unsigned long identifier;
   unsigned char data[8];
   unsigned char type; //1 = IDE   0=standard
   unsigned char length; // data length
   unsigned char RTR; //Remote flag. 1 it means remote frame
} typCANmessage;


ho una funzione che all'interno ne richiama una seconda

Codice:
unsigned char can20b_CAN_read_message(typCANmessage *msg)
{
   ECAN_RX_MSG_FLAGS flags;
   
   if (ECANReceiveMessage(msg->identifier, msg->data, msg->length, &flags) == TRUE)
   {
      //to do
   }
}


il mio dubbio in questo momento è il seguente
alla funzione can20b_CAN_read_message io passo il puntatore ad una variabile msg di tipo typCANmessage... fino qui ok
ma quando alla funzione ECANReceiveMessage io passo come parametro per esempio msg->identifier, sto passando il puntatore a msg->identifier oppure il contenuto.

Mi confondo in quando la funzione principale riceve un puntatore e non una variabile

Qualcuno saprebbe chiarirmi la questione?

Grazie a tutti
Summerwind78
Advanced Member
Advanced Member
 
Messaggio: 1468 di 2976
Iscritto il: 29/01/2011, 14:06
Località: Italia

Re: Dubbio su passaggio di puntatore a struttura

Messaggioda vict85 » 25/09/2018, 11:09

Dipende dalla funzione in questione. In questo caso passi una variabile, ovvero quella contenuta all'indirizzo msg+offset (dalla struttura suppongo che offset = 0). Ovviamente puoi anche chiedere al compilatore di produrti il codice asm annotato.
vict85
Moderatore
Moderatore
 
Messaggio: 9404 di 19253
Iscritto il: 16/01/2008, 00:13
Località: Berlin

Re: Dubbio su passaggio di puntatore a struttura

Messaggioda Summerwind78 » 25/09/2018, 13:46

Tutto chiaro


grazie mille
:-D
Summerwind78
Advanced Member
Advanced Member
 
Messaggio: 1469 di 2976
Iscritto il: 29/01/2011, 14:06
Località: Italia

Re: Dubbio su passaggio di puntatore a struttura

Messaggioda apatriarca » 27/09/2018, 09:24

Il fatto che msg sia passato per puntatore o come copia non ha alcun effetto su quello che viene passato a ECANReceiveMessage. Siccome ECANReceiveMessage riceve un intero allora msg->identifier sarà il valore intero contenuto nella variabile, msg->data sarà il puntatore all'array data e così via. Alla fin fine msg->identifier è solo una scrittura alternativa per (*msg).identifier. L'unica differenza tra le due situazioni è che se passi un puntatore, allora il puntatore msg->data sarà anche il puntatore al corrispondente array nella variabile passata come argomento. Se fosse stato passato come copia, sarebbe stato un puntatore ad una variabile locale alla funzione e quindi le modifiche non sarebbero state propagate al di fuori di essa.
apatriarca
Moderatore
Moderatore
 
Messaggio: 5133 di 10435
Iscritto il: 08/12/2008, 20:37
Località: Madrid


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite