|
|
|
![]() |
|
Strumenti |
![]() |
#1 | |
Senior Member
Iscritto dal: Nov 2003
Messaggi: 1102
|
[C] Capire i puntatori
Ragazzi, ho questo codice:
Quote:
-)prende i valori di x e y (parametri attuali) e li copia in a e b(par. formali) e fin qua ci siamo.. -)fa lo scambio con l'uso di una variabile di scambio temporanea a temp associa val di a poi ad a si da val di b e poi in b si prende il valore di temp(ovvero il val iniziale di a) adesso mi spiegate cosa succede, cioè il codice non esce, non va nel main (perchè non escono i valori scambiati)? Se mi aiutate su questo credo che riuscirò a capire gran parte del c++, visto che tutto l'esame di programmazione I si basa principalemte sul passaggio con i puntatori |
|
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Non funziona per il semplice fatto che a e b di scambia sono solo copie di x e y presenti nel main. Quindi te modifichi a e b ma queste modifiche non si ripercuotono su x e y.
Se vuoi lavorare su x e y all'interno di scambia devi usare i puntatori. Occhio a non confondere C e C++, sono "leggermente" diversi. |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Nov 2003
Messaggi: 1102
|
ma perchè le modifiche non si ripercuotono?
cioè dopo che ha scambiato a e b dentro la void scambia, questi valori non ritornano nella chiamata nel main?(mi puoi spiegare proprio passo passo io voglio capire il perchè)
Grazie mille |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
I C il passaggio di parametri può avvenire solo tramite copia (anche i puntatori vengono passati per copia, tant'è che se si vuole modificare un puntatore bisogna usare l'indirezione multipla). Quindi te dichiarando la firma del metodo così: Codice:
void scambia(int a, int b) Tanto per capirci è come se te prendi un documento in una cartella e lo copi da un'altra parte, se modifichi la copia, il documento originale non viene modificato. Come puoi fare per modificare il documento originale? Crei un link al documento, per cui se ci clicchi sopra in realtà stai lavorando sul file posizionato da un'altra parte. Ecco il puntatore funge da equivalente del link, tramite il puntatore puoi modificare la variabile che sta da un'altra parte. Ultima modifica di tomminno : 30-09-2009 alle 15:05. |
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Indirezione.
La parola "indirettezza" non l'ho mai sentita e così ad orecchio credo neppure esista. @ubanton: se posso ti consiglio di reperire e studiare del materiale specifico sul linguaggio C. I tipi puntatore sono dei tipi primitivi di dato del linguaggio C e non sapere di preciso cosa sono (come non sapere di preciso come è strutturato il sistema dei tipi primitivi in C) ti renderà sempre arduo capire e scrivere del codice in C. Si tratta proprio delle basi minime da sapere, percui se prevedi di usarlo ancora (il linguaggio C) ti consiglio vivamente di consultare un buon manuale per questo linguaggio.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:14.