|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Mar 2003
Città: Roma
Messaggi: 1529
|
Passaggi di strutture e membri di strutture a funzioni in C!
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! ![]()
__________________
Ho concluso trattative positive con: Miky71- Maxus- Echirulli (x2)- Giullare- Flyawayrm- Astro76- Marlom- Manuel78- Sclergio- The Saint- Ippo 2001- Fabietto_18. LA DROGA NON E' MAI LEGGERA: E' DROGA. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Scrivendomi un PVT hai solatanto aumentato al tua attesa...ti stavo rispondendo quando mi è arrivato il dialogo di apertura dei messaggi privati
![]() ![]() Codice:
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; } Se poi un giorno vedrai il C++ (o una versione aggiornata del C allo standard C99) capirai il perchè... |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Mar 2003
Città: Roma
Messaggi: 1529
|
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!!!
![]()
__________________
Ho concluso trattative positive con: Miky71- Maxus- Echirulli (x2)- Giullare- Flyawayrm- Astro76- Marlom- Manuel78- Sclergio- The Saint- Ippo 2001- Fabietto_18. LA DROGA NON E' MAI LEGGERA: E' DROGA. |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Voi avete fatto così quello che chiamate "passaggio per riferimento" ?
|
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Mar 2003
Città: Roma
Messaggi: 1529
|
Quote:
![]() ps: perchè c'è un altro metodo per passarle "per riferimento"? ![]()
__________________
Ho concluso trattative positive con: Miky71- Maxus- Echirulli (x2)- Giullare- Flyawayrm- Astro76- Marlom- Manuel78- Sclergio- The Saint- Ippo 2001- Fabietto_18. LA DROGA NON E' MAI LEGGERA: E' DROGA. |
|
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Mar 2003
Città: Roma
Messaggi: 1529
|
Quote:
![]() cmq qual'è il nuovo metodo introdotto??? ![]()
__________________
Ho concluso trattative positive con: Miky71- Maxus- Echirulli (x2)- Giullare- Flyawayrm- Astro76- Marlom- Manuel78- Sclergio- The Saint- Ippo 2001- Fabietto_18. LA DROGA NON E' MAI LEGGERA: E' DROGA. |
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Vabbè...non ti interessa... Ti servirà quando e se farai il C++
![]() Comunque si chiama passaggio per riferimento... Codice:
void f(int &i) { i = 0; } int a = 10; f(a); //a questo punto i è uguale a 0... ![]() |
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Mar 2003
Città: Roma
Messaggi: 1529
|
Quote:
![]()
__________________
Ho concluso trattative positive con: Miky71- Maxus- Echirulli (x2)- Giullare- Flyawayrm- Astro76- Marlom- Manuel78- Sclergio- The Saint- Ippo 2001- Fabietto_18. LA DROGA NON E' MAI LEGGERA: E' DROGA. |
|
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
In pratica i è un alias di a... A fine del codice assembly generato è la stessa cosa del passaggio per indirizzo
![]() |
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
|
Quote:
Codice:
void f(int *i) { *i = 0; } |
|
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
E' il passaggio per riferimento del C++
![]() |
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
|
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...
![]() |
![]() |
![]() |
![]() |
#14 | |
Senior Member
Iscritto dal: Mar 2003
Città: Roma
Messaggi: 1529
|
Quote:
__________________
Ho concluso trattative positive con: Miky71- Maxus- Echirulli (x2)- Giullare- Flyawayrm- Astro76- Marlom- Manuel78- Sclergio- The Saint- Ippo 2001- Fabietto_18. LA DROGA NON E' MAI LEGGERA: E' DROGA. |
|
![]() |
![]() |
![]() |
#15 |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
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)
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
![]() |
![]() |
![]() |
#16 | |
Senior Member
Iscritto dal: Mar 2003
Città: Roma
Messaggi: 1529
|
Quote:
![]()
__________________
Ho concluso trattative positive con: Miky71- Maxus- Echirulli (x2)- Giullare- Flyawayrm- Astro76- Marlom- Manuel78- Sclergio- The Saint- Ippo 2001- Fabietto_18. LA DROGA NON E' MAI LEGGERA: E' DROGA. |
|
![]() |
![]() |
![]() |
#17 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Non sono sicuro che ci sia...mi sembrava che fosse stato introdotto nel C99... Purtroppo non ho ancora visto il C99
![]() Sicuramente ilsensine ne sa di più... |
![]() |
![]() |
![]() |
#18 |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
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.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
![]() |
![]() |
![]() |
#19 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Probabilmente ho fatto confusione io
![]() |
![]() |
![]() |
![]() |
#20 |
Senior Member
Iscritto dal: Dec 2000
Città: dintorni di Seregno (MI)
Messaggi: 312
|
Il passaggio per reference non è nel C99 mentre è standard nel C++ da almeno il 1994 (se non da quando hanno inventato il linguaggio).
__________________
powered by GNU/Linux [ Debian Sid ] |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:09.