Sto leggendo le basi del c e non capisco perche abbiano creato sti stramaledetti puntatori.a questo punto mi chiedo.
quando usare i puntatori e quando le variablii ...ciao e grazie
Sto leggendo le basi del c e non capisco perche abbiano creato sti stramaledetti puntatori.a questo punto mi chiedo.
quando usare i puntatori e quando le variablii ...ciao e grazie
Ciro Marotta - Programmatore JAVA - PHP
Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.
Sono due cose diverse.
Un puntatore contiene l'indirizzo della variabile localizzata in memoria.
A cosa servono?
A tante cose, per esempio a passare i parametri di una funzione per riferimento.
bye
michele
michele.facchin@virgilio.it
Server:irc.azzurra.org | /join #c
Beh... da spiegare è un pò difficile ma ci provo e spero di non sbagliare.
Una variabile è l'allocazione della memoria per l'inserimento di dati:
char prova[5];
In questo modo alla variabile char prova sono riservati 5 bytes in memoria.
Con i puntatori, punti una variabile ad un indirizzo di memoria:
char *prova2 = &prova;
In questo modo prova2 è puntato a prova, e modificando prova2 modifichi anche prova, proprio perchè l'indirizzo di memoria è uguale.
Ora, per allocare uno spazio di memoria ad un puntatore si usa malloc():
char *prova = (char *)malloc(5);
In questo modo puoi usare il puntatore come una variabile, perchè gli è stata allocata la memoria di 5 bytes.
void modifica(char *prova) {
strcpy(prova, "prova");
}
int main(void) {
char prova[5];
strcpy(prova, "asd");
modifica(&prova);
}
In questo modo modifica quella stessa variabile prova da "asd" a "prova", poichè con &prova gli hai passato l'indirizzo di memoria.
Se invece facevi modifica(char prova[]) e facevi modifica(prova) copiavi la variabile prova del main() e la passavi alla funziona come nuova variabile ma con contenuto uguale, quindi la modifica sarebbe avvenuta solo all'interno della funzione e non avrebbe modificato la variabile originale.
Spero di essere stao chiaro
Non esattamente, essendo prova un array.In questo modo modifica quella stessa variabile prova da "asd" a "prova", poichè con &prova gli hai passato l'indirizzo di memoria.
Se invece facevi modifica(char prova[]) e facevi modifica(prova) copiavi la variabile prova del main() e la passavi alla funziona come nuova variabile ma con contenuto uguale, quindi la modifica sarebbe avvenuta solo all'interno della funzione e non avrebbe modificato la variabile originale.
Spero di essere stao chiaro [/B]
Quindi anche facendo:
Gli passi lostesso l'indirizzo di quella variabile.codice:modifica (prova);
bye
michele
michele.facchin@virgilio.it
Server:irc.azzurra.org | /join #c
Si hai ragione scusa... un attimo di confusione
Credo che un puntatore sia a tutti gli effetti una variabile.
Prova fare una ricerca, è un argomento già trattato diverse volte!
Lo puoi passare unicamente in quel modo, in quanto un vettore di char è equivalente (con alcune differenze) ad un char*Non esattamente, essendo prova un array.
Quindi anche facendo:
Gli passi lostesso l'indirizzo di quella variabile.codice:modifica (prova);
La differenza è che un array punta ad un area di memoria in modo "costante", cioè non puoi modificare l'area di memoria a cui punta.
Nel caso dei puntatori questi possono modificare l'indirizzo di memoria a cui puntano in fase di run-time
grazie per aver risposto ma, in pratica se i volessi realizzare un programma in cui mi interessa solamente passare varibaili per valore basterebbe usare le semplici variabili e non i puntatori????
poi scriver *variabile equivale a dire che c'è uno spazio in memoria a cui io posso accedere chiamandolo variabile?
se poi metto *variabile=&variabile2 dove variabile 2 è una variabile
indico che puntando su variabile devo considerare il valore di variabile 2???
ciao e grazie
Ciro Marotta - Programmatore JAVA - PHP
Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.
se nei programmi che costruisci ti interessa la pesantezza e il tempo di esecuzione, e' sicuramente + efficiente passare un puntatore che una struttura vera e propria!
quidni passare il puntatore allegerisce il programma
questo è undo dei motivi per cui si usano....
Ciro Marotta - Programmatore JAVA - PHP
Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.