Newsgroup: it.comp.lang.c
Titolo: Passare parametri per reference

Salve a tutti,
vorrei imparare a implementare una funzione con parametri di ritorno
passati per reference. In pratica ho creato una struct 'T_m' evorrei
il risultato direttamente sulla variabile chiamante di tipo T_m.
Ho provato in questi due modi:
void f(const T_m &var);
e il compilatore mi dice che manca una parentesi,
T_m & f(void);
e il compilatore mi dice che la dichiarazione termina scorrettamente.
uso Borland TurboC 3.1, ma credo che il problema sia
la mia enorme ignoranza sulla corretta sintassi.
Qualcuno mi puo' aiutare?
Grazie in anticipo
Sent via Deja.com 
http://www.deja.com/
Before you buy.

 Grazie in anticipo
Ciao.


> void f(const T_m &var);
In C non si passa per reference, ma per indirizzo (puntatori)
La sostanza č la stessa, almeno nel tuo caso, cambia solo la notazione.
--
Alessandro Monti

Qualcuno mi puo' aiutare?
E' un controsenso passare per riferimento una parametro definito
costante.
La sintassi corretta e' 
void f( T_m& var ) ;
Comunque tieni presente che questo codice e' C++, non C.
Il C non possiede, diversamente dal suo nipotino, il passaggio per
riferimento, ma solo per valore.
--
Andrea Laforgia        (
andrea_...@bigfoot.com
)

 e il compilatore mi dice che la dichiarazione termina scorrettamente.
Il tipo T& (T reference) esiste solo in C++ ma non in C. Controlla
quindi di compilare il tuo sorgente in modalitą C++.
EMG

 >e il compilatore mi dice che la dichiarazione termina scorrettamente.


è C++? Visto che non penso proprio che sia così dov'è l'errore? (se è mio)
L'errore e' nell'intendere che passare ad una funzione l'indirizzo di
una variabile, voglia dire passarla per riferimento.
Il C non supporta il passaggio per riferimento (e questo e' assodato),
anche il passaggio tramite indirizzo e' un passaggio per copia.
Copia di cosa ? dell'indirizzo.
Il C obbliga ad usare i puntatori, e questo e' scomodo ed e' una
possibile fonte di problemi.
E' un modo di "simulare" il passaggio per riferimento, ma il
linguaggio non lo possiede.
Il C++, invece, cosi' come il Pascal e il Fortran (che tra l'altro,
contrariamente al C, ha *solo* il passaggio per riferimento)
gestiscono il riferimento ai parametri all'interno delle funzioni,
come se fossero passati per valore.
In pascal si scrive :
function mia_funz( var a : integer ) : integer ;
begin
  a := 3 ;
end ;
in C++ :
int mia_funz( int& a ) 
{
    a = 3 ;
}
--
Andrea Laforgia        (
andrea_...@bigfoot.com
)

 è C++? Visto che non penso proprio che sia così dov'è l'errore? (se è mio)
E' vero che il C non supporta il passaggio dei parametri per riferimento
ma non è vero che questo non si possa ottenere ugualmente. Basta
utilizzare un puntatore. E la chiamata che hai riportato è perfettamente
compatibile con il linguaggio C. Penso che tu stia facendo confusione
tra il tipo T& (riferimento a T, supportato solo in C++) e l'operatore &
(address_of) che restituisce l'indirizzo di una variabile.
EMG


Quella è la chiamata della funzione...........
In questo modo viene "praticamente" passato per valore (copia) l'indirizzo
della variabile var
Per esempio se la variabile var è allocata all'indirizzo di memoria 1000
&var indica 1000
Alla scanf viene passato per "copia" il valore 1000
--
________________________________
Togliete NoSpaM per rispondermi
bye Brain

 void f(const T_m &var);
  ***************************************************************
Anzitutto se T_m e' di tipo struct e non l' hai ridefinito come tipo di dato,
il compilatore non riesce a comprendere "di cosa stiamo parlando", secondo poi
un tipo di dato definito const "NON PUO ESSERE MODIFICATO!!!".
La giusta dichiarazione potrebbe essere:
void    f    (struct T_m *var);    /*    Definizione della funzione     */
void    f    (struct T_m * )         /*     Prototipo della funzione      */
f    (&var);                              /*    Richiamo della funzione        */
--
Posted from 
mta02-acc.tin.it
 [212.216.176.33]
via Mailgate.ORG Server - 
http://www.mailgate.org