Puntatori a strutture... punto o freccetta?

kobeilprofeta
Supponiamo di avere creato un vettore Auto macc[10];
dove
typedef struct
{
double prezzo;
char marca;
}Auto;

Ora voglio passare il vettore ad una funzione vedendolo come puntatore a struttura.
Avrò ad esempio una funzione
int autook(Auto*);

All'interno della funzione, quando devo usare il punto e quando la freccetta per accedere ai vari campi?

grazie

Risposte
apatriarca
Se il tipo dell'espressione alla sinistra del simbolo è un puntatore a struttura devi usare la freccia, se è una struttura devi usare il punto. Quindi dentro autook scriverai auto->prezzo supponendo che auto sia il nome dell'argomento della funzione. In alternativa puoi anche scrivere (*auto).marca in cui (*auto) ha tipo Auto per via dell'operatore *. Spero sia chiaro.

kobeilprofeta
okok grazie

quindi una cosa del genere sarebbe giusta?

auto->prezzo;
auto[3].prezzo;

apatriarca
Sì, è corretta.

kobeilprofeta
Grazie

kobeilprofeta
Un'altra cosetta... queste due sono uguali vero?


1)
void read (Auto *a)
{
scanf("%lf",a.prezzo);
}
2)
void read (Auto *a)
{
scanf("%lf",&(a->prezzo));
}

vict85
Un piccolo commento stilistico: auto è una parola chiave del C++11 e seguenti. È quindi meglio evitare ci chiamare qualcosa con quel nome. Ovviamente vale più per il futuro.

Il primo è sbagliato. La variabile a è un puntatore e quindi non possiede membri.

kobeilprofeta
"vict85":
Un piccolo commento stilistico: auto è una parola chiave del C++11 e seguenti. È quindi meglio evitare ci chiamare qualcosa con quel nome. Ovviamente vale più per il futuro.

Il primo è sbagliato. La variabile a è un puntatore e quindi non possiede membri.



ok, grazie.
ciao.

PS: grazie per il consiglio... per ora ho usato solo il linguaggio C, C++ mai visto...
comunque spero di ricordarmelo in futuro -.-

claudio862
"vict85":
Un piccolo commento stilistico: auto è una parola chiave del C++11 e seguenti. È quindi meglio evitare ci chiamare qualcosa con quel nome. Ovviamente vale più per il futuro.


"auto" è una parola chiave anche in C e in C++ pre-2011 (con un significato diverso). "Auto" invece (con l'iniziale maiuscola) va bene.

vict85
"claudio86":
[quote="vict85"]Un piccolo commento stilistico: auto è una parola chiave del C++11 e seguenti. È quindi meglio evitare ci chiamare qualcosa con quel nome. Ovviamente vale più per il futuro.


"auto" è una parola chiave anche in C e in C++ pre-2011 (con un significato diverso). "Auto" invece (con l'iniziale maiuscola) va bene.[/quote]

Certo, ma il mio era un consiglio di stile. Ritengo che sia meglio evitare anche le varianti delle keyword per una questione di leggibilità del codice.

P.S.: Mi ero dimenticato che esisteva una keyword per dire esplicitamente che una variabile è automatic. Sinceramente non ne ho mai compresa l'utilità.

kobeilprofeta
"...Sinceramente non ne ho mai compreso l'utilità..."

come delle variabili costanti... a cosa servono (uso define in genere)? ahah

apatriarca
Non è proprio uguale. Le variabili costanti hanno senso, la parola chiave auto è invece del tutto equivalente a non scrivere nulla. Insomma, in tutte le situazioni in cui ha senso scrivere auto in C, non ha alcun effetto sul codice. Questo non è certamente vero per const e rappresentando una variabile che non può essere modificata ha un utilizzo ben diverso da una macro. In particolare, può essere inizializzata utilizzando una espressione non costante. Ma il suo uso in C è più limitato di quanto potrebbe essere e infatti in C++ è stata resa molto più utile e potente.

kobeilprofeta
Sí, sí, era una battuta... non ho le conoscenze per sostenere che qualcosia sia inutile...
comunque penso che tu mi abbia fatto capire l'utilità del const... :)
ad esempio
double c,r;
printf("circonferenza? ");
scanf("%lf",&c);
printf("\nraggio? ");
scanf("%lf",&r");
const double pi=c/2r;

con define non avrei potuto farlo...

grazie... top.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.