• Benvenuto in Making Videogames!
  • Dai sfogo alla tua fantasia!
  • Crea il tuo Videogioco!
Benvenuto ospite! Login Registrati




Valutazione discussione:
  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5
[C++]Chiarimenti su una lezione della guida di HTML.it
#4
Anzitutto chiariamo definiamo meglio il concetto di variabile.
Quando dico int a = 10 il compilatore associa alla lettera "a" il valore 10, e se lo salva in un indirizzo di memoria.
Se io dico: int b = a il compilatore crea un nuovo spazio di memoria dove si salva b e gli associa il valore di a.
Se io dico: a=20 cambia solo il valore associato ad a, è vero che io avevo detto che b è uguale ad a, ma sono due variabili differenti.

Quando io creo una funzione con parametri avviene la stessa cosa:
Codice PHP:
#include <iostream>
using namespace std;
void crescente(int cint d);

int main()
{
int ab;
cout << "inserisci il valore di A : ";
cin >> a;
cout << "inserisci il valore di B : ";
cin >> b;
crescente(a,b);
cout << "ordine crescente: " << << " " << b;
return 
0;
}

void crescente(int c,int d)
{
if(
c>d)
{
int tmp c;
d;
tmp;
}


Le variabili c e d della funzione void ordina(int c, int d) sono in uno spazio di memoria differente rispetto quelle dichiarate nel main. Questo vuol dire che lo scambio non avviene.

Se scrivo: int a = 10; int *punt = &a; si creano sempre due spazi di memoria, ad a è associato 10 mentre a punt viene associato l'indirizzo di a.
Se ora scrivo *punt = 20; sto dicendo: modificami il valore che contiene quell'indirizzo di memoria (ovvero: modificami il valore di a).
In parole semplici è come dare due nomi alla stessa variabile, se io modifico *punt modifico anche a (e viceversa).
Quindi se riscrivo la funzione scambia in questo modo, funziona:

Codice PHP:
#include <iostream>
using namespace std;
void crescente(int *cint *d);

int main()
{
int ab;
cout << "inserisci il valore di A : ";
cin >> a;
cout << "inserisci il valore di B : ";
cin >> b;
crescente(&a,&b);
cout << "ordine crescente: " << << " " << b;
return 
0;
}

void crescente(int *c,int *d)
{
if(
c>d)
{
int tmp = *c;
*
= *d;
*
tmp;
}


Con il passaggio by reference a grandi linee avviene la stessa cosa.

Effettivamente su html.it non c'è proprio un buon esempio, il codice lì scritto si potrebbe fare anche senza puntatori, ma per fare una funzione di ordinamento di questo tipo è necessario utilizzare gli indirizzi di memoria; per approfondire meglio leggi le lezioni sui puntatori, sempre su html.it (o su altre guide che trovi).

Capito?
 
Rispondi
  


Messaggi in questa discussione
RE: [C++]Chiarimenti su una lezione della guida di HTML.it - da steve - 02-04-2011, 10:52 PM

Discussioni simili
Discussione Autore Risposte Letto Ultimo messaggio
  Bisogno di una guida per il Visual C# samuele55598@gmail.com 1 1,122 23-01-2014, 09:55 PM
Ultimo messaggio: WilSoft90
  [C#] Dubbio concettuale su Array di oggetti cuge89 3 1,587 30-10-2013, 10:17 AM
Ultimo messaggio: cuge89

Vai al forum:


Browsing: 1 Ospite(i)