Puntatori a strutture... punto o freccetta?
Supponiamo di avere creato un vettore Auto macc[10];
dove
Ora voglio passare il vettore ad una funzione vedendolo come puntatore a struttura.
Avrò ad esempio una funzione
All'interno della funzione, quando devo usare il punto e quando la freccetta per accedere ai vari campi?
grazie
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
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.
okok grazie
quindi una cosa del genere sarebbe giusta?
auto->prezzo;
auto[3].prezzo;
quindi una cosa del genere sarebbe giusta?
auto->prezzo;
auto[3].prezzo;
Sì, è corretta.
Grazie
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));
}
1)
void read (Auto *a)
{
scanf("%lf",a.prezzo);
}
2)
void read (Auto *a)
{
scanf("%lf",&(a->prezzo));
}
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.
Il primo è sbagliato. La variabile a è un puntatore e quindi non possiede membri.
"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 -.-
"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.
"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à.
"...Sinceramente non ne ho mai compreso l'utilità..."
come delle variabili costanti... a cosa servono (uso define in genere)? ahah
come delle variabili costanti... a cosa servono (uso define in genere)? ahah
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.
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
con define non avrei potuto farlo...
grazie... top.
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.