View Full Version : [C] Puntatori
Mi potete dire se ci sono errori in questo codice:
funzione1(int *a, int *b, int *c);
funzione2(int *a,*b);
funzione3(int *c);
main()
{
int a,b,c;
funzione1(&a,&b,&c);
}
funzione1(int *a, int *b, int *c)
{
funzione2(&a, &b);
funzione3(&c);
if(*a>*b) *c=*b;
}
Ho dei problemi con i puntatori in un programma e non ne capisco il motivo.
pietro84
12-12-2005, 20:14
Mi potete dire se ci sono errori in questo codice:
funzione1(int *a, int *b, int *c);
funzione2(int *a,*b);
funzione3(int *c);
main()
{
int a,b,c;
funzione1(&a,&b,&c);
}
funzione1(int *a, int *b, int *c)
{
funzione2(&a, &b);
funzione3(&c);
if(*a>*b) *c=*b;
}
Ho dei problemi con i puntatori in un programma e non ne capisco il motivo.
il primo errore è che non hai inizializzato a,b,c nel programma principale.
il primo errore è che non hai inizializzato a,b,c nel programma principale.
Ah già, non ha senso fare l'if in questo caso, però a livello di puntatori ha senso questo codice?
Perchè nel programma che sto facendo non capisco il motivo per cui a volte necessito di passare una variabile a una funzione con la & davanti e altre volte no.
Il codice sopra per quanto riguarda l'uso dei puntatori ha degli errori?
pietro84
12-12-2005, 20:34
Ah già, non ha senso fare l'if in questo caso, però a livello di puntatori ha senso questo codice?
Perchè nel programma che sto facendo non capisco il motivo per cui a volte necessito di passare una variabile a una funzione con la & davanti e altre volte no.
Il codice sopra per quanto riguarda l'uso dei puntatori ha degli errori?
mi sembra proprio di no. quando passi la variabile per valore non ci vuole l'operatore & . quando passi la variabile per indirizzo ci vuole l'operatore &,che restituisce appunto l'indirizzo della variabile a cui è applicato.
mi sembra proprio di no. quando passi la variabile per valore non ci vuole l'operatore & . quando passi la variabile per indirizzo ci vuole l'operatore &,che restituisce appunto l'indirizzo della variabile a cui è applicato.
Ecco io dovrei passare tutte le variabili per indirizzo.
nel codice che hai dato
- due funzioni sono dichiarate ma non definite, quindi non si compila nulla
- i prototipi delle due funzioni che mancano non sono coerenti con il loro utilizzo
quando sei dentro a funzione1 a è di tipo int* (puntatore a intero), non è un intero.
quindi quando passi &a (l'indirizzo di a) non stai passando un puntatore a intero, bensì l'indirizzo della tua variabile a .
dato che a è già un puntatore passi un puntatore a puntatore, quindi il prototipo corretto è con i paramentri di tipo int** (puntatore a puntatore a intero).
per passare l'indirizzo della variabile intera che hai nel main dentro a funzione1 basta passare a che è già un indirizzo.
la deferenziazione sul maggiore e sull'uguale invece è corretta.
ciao
pietro84
12-12-2005, 20:56
Ecco io dovrei passare tutte le variabili per indirizzo.
e allora devi mettere l'operatore & per le variabili,per gli array naturalmente non ci vuole perchè quando passi l'array ti riferisci già all'indirizzo del primo elemento.
Mi potete dire se ci sono errori in questo codice: ce ne sono un paio:
funzione1(int *a, int *b, int *c);
funzione2(int *a,*b); qui non hai scritto "int" davanti a "*b".
funzione3(int *c);
main()
{
int a,b,c; qui, come ti hanno detto, è meglio inizializzare. ;)
funzione1(&a,&b,&c);
}
funzione1(int *a, int *b, int *c)
{
funzione2(&a, &b); ennò!! qui stai passando due doppi puntatori a una funzione che vuole due puntatori singoli!!
funzione3(&c); e qui idem
inoltre presumo che prima di compilare tu abbia scritto anche l'implementazione di funzione2 e funzione3... ;)
pietro84
12-12-2005, 21:13
nel codice che hai dato
dato che a è già un puntatore passi un puntatore a puntatore, quindi il prototipo corretto è con i paramentri di tipo int** (puntatore a puntatore a intero).
:read: quoto, mi era sfuggito
Ciao grazie a tutti delle risposte.
Questo codice non l'ho ovviamente compilato, ho buttato giù un paio di righe per esporre il concetto che non riuscivo a capire ma non sono riuscito a spiegarmi bene.
Il codice delle ultime funzioni non l'ho nemmeno scritto perchè non era una parte che mi interessava.
Il mio dubbio era questo:
se io passo una variabile per indirizzo a una funzione e questa funzione richiama un'altra funzione devo passare anche a quest'ultima quando la chiamo la variabile per indirizzo?
La risposta era no, questo era il dubbio cmq grazie a tutti.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.