Ho una domanda riguardante le strutture in C. Quindi quando si crea una struttura, si sta essenzialmente definendo la struttura di un blocco di memoria. Pertanto, quando crei un'istanza di una struttura, stai creando un blocco di memoria tale da essere in grado di contenere un certo numero di elementi.Che cosa fa esattamente l'Operatore di Dot C Structure (Prospettiva di livello inferiore)?
Tuttavia, sono un po 'confuso su ciò che l'operatore punto sta facendo. Se ho un struct Car
e hanno chiamato un membro GasMileage
(che è membro int
), sono in grado di ottenere il valore di GasMileage
facendo qualcosa di simile,
int x = CarInstance.GasMileage;
Tuttavia, io sono confuso su ciò che è in realtà accade con questo operatore punto. L'operatore punto agisce semplicemente come offset dall'indirizzo di base? E quanto è esattamente in grado di dedurre che è un int?
Immagino di essere curioso di sapere cosa sta succedendo dietro le quinte. Sarebbe possibile fare riferimento a GasMileage
facendo qualcos'altro? Ad esempio
int *GasMileagePointer = (&carInstance + offsetInBytes(GasMileage));
int x = *GasMileage
Questo è solo qualcosa che ho rapidamente inventato. Ho provato a cercare una buona spiegazione, ma nulla sembra spiegarlo oltre a considerare magico l'operatore di punti.
[Come posso ottenere/impostare un membro struct per offset] (https://stackoverflow.com/questions/2043871/how-can-i-get-set-a-struct-member-by-offset). Risolve almeno la seconda parte della tua domanda. – kaylum
Forse un libro sulla costruzione del compilatore sarebbe una buona lettura. – Olaf
@Olaf: non è necessario comprendere la costruzione del compilatore per comprendere la semantica dell'operatore '.'. –