Newsgroup: it.comp.lang.pascal
Titolo: Passaggio parametri con liste.

Salve ragazzi, vorrei chiedervi una domanda teorico-pratica. Quali sono le
differenze esistenti tra un passaggio per riferimento ed uno per valore di
un puntatore ad una lista?
Grazie in anticipo per chi trovasse la voglia di rispondermi.

 un puntatore ad una lista?
le differenze sono le solite, passando un puntatore per valore non ne puoi
modificare il valore, o meglio le modifiche fatte all'interno della procedura
non rimarranno all'uscita della procedura stessa, ma solo al suo interno;
passando un puntatore per riferimento, allora le modifiche sono effettivamente
globali e si ripercuotono su tutto il programma.
Spero di essere stato chiaro, altrimenti chiedi ancora
Ciao

globali e si ripercuotono su tutto il programma.
Credo che le espressioni "puntatore per valore" e "puntatore per
riferimento" creino un po' di ambiguita' e confusione, perche' poco
corrette.
In generale, per modificare in modo permanente l'oggetto passato ad
una funzione, bisogna passare il parametro per riferimento.
In Pascal si fa mediante la keyword "var" :
procedure swap( var a, b : Integer ) ;
var temp : Integer ;
begin
  temp := a ;
  a := b ;
  b := temp ;
end ;
In C, invece, non esiste il passaggio per riferimento, ma lo si simula
con il passaggio per valore di un puntatore alla variabile da
modificare.
Cioe', la procedura precedente equivale alla funzione C :
void swap( int *a, int *b )
{
     int temp = *a ;
     *a = *b ;
     *b = temp ;
}
che si riscrive in pascal con :
type int_ptr = ^integer ;
procedure swap( a, b : int_ptr ) ;
var temp : Integer ;
begin
  temp := a^ ;
  a^ := b^ ;
  b^ := temp ;
end ;
In cui, appunto, non c'e' passaggio per riferimento, ma solo passaggio
per valore di un puntatore.
Il C++, invece, possiede il passaggio per riferimento, quindi a
differenza del C e in modo simile al pascal, si ha :
void swap( int& a, int& b )
{
     int temp = a ;
     a = b ;
     b = a ;
}
E' utile sottolineare che il passaggio per riferimento, in tutti i
linguaggi che lo supportano, viene implementato (internamente) come un
passaggio per valore di un puntatore costante (esattamente come in C).
Puntatore che viene deriferito dentro la funzione/procedura.
--
Andrea Laforgia (ICQ 87230455)
"ci sono tre tipi di persone nel mondo : quelli che
 sono bravi in matematica e quelli che non lo sono."

un puntatore ad una lista?
Per puntatore a una lista intendi la "testa" della lista ?
Passarlo per riferimento, significa poterne modificare il valore.
Passarlo per valore, significa poter utilizzare il suo valore, senza
poterlo modificare.


 ha scritto nel messaggio
news:99krke$hgf$1...@fe1.cs.interbusiness.it...


 Spero di essere stato chiaro, altrimenti chiedi ancora
In pratica volevo sapere se, passando il puntatore alla testa di una lista
per valore, il compilatore creasse in un'altra locazione di memoria una
copia della lista intera come fa, se non sbaglio, con variabili di altro
tipo.
Grazie per le risposte che sono pervenute e per le future che, spero,
arriveranno nonostante la domanda noiosa.
Bye Bye :-)

 Puntatore che viene deriferito dentro la funzione/procedura.
questo č sicuramente interessante, buono a sapersi, grazie!

tipo.
Assolutamente no.
Tieni presente che il passaggio per valore implica una copia dei
parametri nello stack e l'unica cosa che verrebbe copiata, in questo
caso, e' il puntatore.


pcpcpc pcpcpc pcpcpcp pc pcpc
pcpcpc pcpcpc pcpcpcp pc pcpc
pcpcpc pcpcpc pcpcpcp pc pcpc
pcpcpc pcpcpc pcpcpcp pc pcpc
pcpcpc pcpcpc pcpcpcp pc pcpc
pcpcpc pcpcpc pcpcpcp pc pcpc
-- 
Posted from [212.204.66.1] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

pcpcpc pcpcpc pcpcpcp pc pcpc
---


pcpcpc pcpcpc pcpcpcp pc pcpc
pcpcpc pcpcpc pcpcpcp pc pcpc
pcpcpc pcpcpc pcpcpcp pc pcpc
-- 



it.test
-- 
Andrea Zwirner
yuppi...@yahoo.it
"Poni ciò che sei nel minimo che fai."