|
|||||||
|
|
|
![]() |
|
|
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: 02:01.




















