View Full Version : Passaggi di strutture e membri di strutture a funzioni in C!
DavidTwister
14-01-2004, 11:41
Allora ragazzi,stò preparando l'esame di Programmazione in C....leggo sul libro:
"Le strutture possono essere passate alle funzioni fornendo:
1) i singoli membri;
2)l'intera struttura;
3)un puntatore alla stessa struttura".
Nel caso si passi una struttura o i suoi singoli membri,questi verranno passati per valore; al fine di passarli x riferimento, dovrete passare alla funzione l'indirizzo della variabile di struttura.
Le domande sono:
1)se voglio passare alla funzione, ad esempio, un membro di una variabile di tipo struttura per RIFERIMENTO, qual'è il modo corretto???
2)Mi fate un esempio in linguaggio C di una funzione che riceve come argomento una struttura intera1 e un membro di una struttura2 prima per riferimento, e poi della stessa funzione che le riceve per valore?
Grazie!;)
Scrivendomi un PVT hai solatanto aumentato al tua attesa...ti stavo rispondendo quando mi è arrivato il dialogo di apertura dei messaggi privati ;) E' inutile mandarmi i PVT...i emssaggi della sezione me li leggo tutti :)
struct s {
int a;
char b;
};
void f_valore_struttura(struct s st)
{
printf("%d %c\n", st.a, st.b);
}
void f_riferimento_struttura(struct s *pst)
{
printf("%d %c\n", pst->a, pst->b);
}
void f_valore_membri(int ma, char mb)
{
printf("%d %c\n", ma, mb);
}
void f_riferimento_membri(int *pma, char *pmb)
{
printf("%d %c\n", *pma, *pmb);
}
int main()
{
struct s pippo;
pippo.a = 10;
pippo.b = 'a';
f_valore_struttura(pippo);
f_riferimento_struttura(&pippo);
f_valore_membri(pippo.a, pippo.b);
f_riferimento_membri(&pippo.a, &pippo.b);
return 0;
}
Sinceramente preferisco chiamare quello che tu chiami "per riferimento" passaggio "per indirizzo"...
Se poi un giorno vedrai il C++ (o una versione aggiornata del C allo standard C99) capirai il perchè...
DavidTwister
14-01-2004, 12:05
ti ringrazio x gli esempi...ora me li leggo per bene e se ho qualche dubbio lo posto sul 3d...scusa se ti ho mandato un pvt ma il primo appello lo avrei domani...ecco il perchè della fretta!!!:D
Voi avete fatto così quello che chiamate "passaggio per riferimento" ?
DavidTwister
14-01-2004, 12:17
Originariamente inviato da cionci
Voi avete fatto così quello che chiamate "passaggio per riferimento" ?
durante il corso nn sò come abbiano fatto,perchè per motivi di lavoro non l'ho potuto seguire...ora controllo meglio sui miei due libri...però non è che sia spiegato un gran ch+ l'uso delle strutture con le funzioni su questi libri...:(
ps: perchè c'è un altro metodo per passarle "per riferimento"?:confused:
Originariamente inviato da DavidTwister
ps: perchè c'è un altro metodo per passarle "per riferimento"?:confused:
Se il libro trattasse l'utlimo standard del C (1999) mi sembra di sì...
DavidTwister
14-01-2004, 12:27
Originariamente inviato da cionci
Se il libro trattasse l'utlimo standard del C (1999) mi sembra di sì...
su entrambe i libri c'è scritto che è stato usato lo standard ANSI/C : 1990....:(
cmq qual'è il nuovo metodo introdotto???:confused:
Vabbè...non ti interessa... Ti servirà quando e se farai il C++ ;)
Comunque si chiama passaggio per riferimento...
void f(int &i)
{
i = 0;
}
int a = 10;
f(a);
//a questo punto i è uguale a 0...
Comqunue non sono sicuro che sia stato inserito nello standard del C99... Sinceramente non me lo ricordo...se qualcuno ne sa di più che lo dica ;)
DavidTwister
14-01-2004, 20:47
Originariamente inviato da cionci
Vabbè...non ti interessa... Ti servirà quando e se farai il C++ ;)
Comunque si chiama passaggio per riferimento...
void f(int &i)
{
i = 0;
}
int a = 10;
f(a);
//a questo punto i è uguale a 0...
Comqunue non sono sicuro che sia stato inserito nello standard del C99... Sinceramente non me lo ricordo...se qualcuno ne sa di più che lo dica ;)
veramente strano come uso....cmq nello standard ANSI C che stiamo studiano questo modo non c'è proprio...:(
In pratica i è un alias di a... A fine del codice assembly generato è la stessa cosa del passaggio per indirizzo ;)
VegetaSSJ5
15-01-2004, 18:27
Originariamente inviato da cionci
Vabbè...non ti interessa... Ti servirà quando e se farai il C++ ;)
Comunque si chiama passaggio per riferimento...
void f(int &i)
{
i = 0;
}
int a = 10;
f(a);
//a questo punto i è uguale a 0...
Comqunue non sono sicuro che sia stato inserito nello standard del C99... Sinceramente non me lo ricordo...se qualcuno ne sa di più che lo dica ;)
cionci scusa ma nel parametro della funzione f perchè dichiari int &i?? non dovresti dischiarare int *i per dire che si tratta di un puntatore??
void f(int *i)
{
*i = 0;
}
??
E' il passaggio per riferimento del C++ ;)
VegetaSSJ5
16-01-2004, 12:08
ops scusa non lo sapevo! non conosco il c++! visto che nel titolo del thread si parlava di c pensavo che tu avessi voluto scrivere il codice in c...;)
DavidTwister
16-01-2004, 12:10
Originariamente inviato da VegetaSSJ5
ops scusa non lo sapevo! non conosco il c++! visto che nel titolo del thread si parlava di c pensavo che tu avessi voluto scrivere il codice in c...;)
da quanto ho capito, quel passaggio di riferimento è in C(l'ultimo standard ANSI), ma dovrebbe essere originario del C++...cionci, è cosi?
ilsensine
16-01-2004, 12:16
A me risulta che in c l'unico passaggio per riferimento possibile è utilizzare i puntatori...
(in effetti il c++ implementa internamente il passaggio per riferimento tramite puntatori)
DavidTwister
16-01-2004, 12:18
Originariamente inviato da ilsensine
A me risulta che in c l'unico passaggio per riferimento possibile è utilizzare i puntatori...
(in effetti il c++ implementa internamente il passaggio per riferimento tramite puntatori)
ah...no perchè sembra con lo standard ANSI C del 99 (non è sicuro dell'anno), si possa effettuare anche nel modo descritto....chi sappia qualcosa di + si faccia vivo!:D
Non sono sicuro che ci sia...mi sembrava che fosse stato introdotto nel C99... Purtroppo non ho ancora visto il C99 :boh:
Sicuramente ilsensine ne sa di più...
ilsensine
16-01-2004, 14:25
Il gcc supporta molte cose del C99, ma il reference alla c++ no...
Non so se lo standard lo prevede, io personalmente non he ho mai sentito parlare.
Probabilmente ho fatto confusione io :cry:
xybercom
16-01-2004, 20:57
Il passaggio per reference non è nel C99 mentre è standard nel C++ da almeno il 1994 (se non da quando hanno inventato il linguaggio).
Per il C99 mi sono sbagliato... Per il C++ non mi sembra che qualcuno avesse detto che non era nello standard...
xybercom
16-01-2004, 21:13
Oops :D
Non ce l'avevo con te, nè tanto meno il mio interesse era dare "lezioni" :)
Volevo solo rimarcare la differenza tra i linguaggi, di solito io uso esclusivamente il C++, ma proprio recentemente ho dovuto mettere le mani su un programma C per cui mi sono dovuto aggiornare sul mitico K&R, scoprendo che di reference in C o C99 non c'è neanche l'ombra.
VegetaSSJ5
17-01-2004, 12:58
ragazzi scusate ma per passaggio per riferimento intendete il passaggio per indirizzo? se mi sbaglio potete illuminermi? grazie!;)
xybercom
17-01-2004, 15:11
Non è la stessa cosa, ti consiglio di leggerti http://www.icce.rug.nl/documents/cplusplus/cplusplus03.html#l37 se ne vuoi sapere di più.
VegetaSSJ5
17-01-2004, 16:14
xybercom però tu mi hai passato l'indirizzo! ;) ;) :D :D :D :sofico: :mc:
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.