• 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
#1
Ciao a tutti! Volevo chiedere chiarimenti su questa lezione della guida di html.it: http://programmazione.html.it/guide/lezi...indirizzo/
Vi ringrazio in anticipo, ciao!
 
Rispondi
#2
Ma fa pena questa guida....

Codice:
#include <iostream.h>

int moltiplica(int* x, int* y);
// Definizione del prototipo

main()
{
int a = 5;
int b = 6;
int risultato;

risultato = moltiplica(& a, & b);
cout << Il risultato della moltiplicazione è:
<< risultato <<endl;

return (0);
}


int moltiplica(int* x, int* y)
// Dichiarazione della funzione
{
int ris;

ris = *x * *y;
return ris;
// Valore restituito dalla funzione.
}

Ma sta usando il c++ o il c ? -.-

Leggiti questo manuale: http://www.mediafire.com/?kokm15ynzjt
 
Rispondi
#3
Usa tutti e due. In base a come girava all'autore xD
 
Rispondi
#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
#5
Non credo di aver capito molto bene :S A cosa serve mettere & e * prima dei nomi delle variabili? E poi scusa, se *punt = a, a non è uguale a *punt, quindi se modifico *punt non dovrebbe modificare anche a. O sbaglio?

EDIT: Rileggendo un attimo la lezione, ho capito di più. Ma ancora non mi è chiaro che differenza c'è tra chiamata per valore e per indirizzo.
EDIT2: L'asterisco (*) prima del nome significa che deve modificare il valore all'interno di quella variabile e che quindi se punt è uguale ad a modifico a e di conseguenza anche punt? :S
 
Rispondi
#6
La & indica l'indirizzo della variabile (è un valore esadecimale).
esempio:
Codice PHP:
int a 10;
cout << "la variabile a risiede nell'indirizzo " << &a// ti uscirà un valore del tipo: 001AF928 

Il * indica che è un puntatore, scrivendo:
(così si capisce meglio come funziona un puntatore)
Codice PHP:
int a 10;
int *= &a//puntatore a intero
cout << "la variabile a risiede nell'indirizzo " << &<< enld;
cout << "la variabile p risiede nell'indirizzo " << &<< " ma punta a " << p

Scrivendo *p dico di darmi (o sovrascrivere) il valore che punta (ovvero il valore di a, 10)
Codice PHP:
int a 10;
int *= &a;
cout << "a = " << << endl;
cout<< "*p = " << *<< endl << endl;
20;
cout << "a = " << << endl;
cout<< "*p = " << *<< endl << endl;
*
30// dire *p è come dire a... ho dato due nomi alla stessa variabile
cout << "a = " << << endl;
cout<< "*p = " << *<< endl


Nella chiamata per valore avviene una cosa del genere: int a = 10; int b = a; (solo scritta tramite funzione).
Creo una copia della variabile a, ma rimangono due variabili differenti... hanno solo lo stesso valore.
 
Rispondi
#7
Chiaro grazie Steve! Big Grin

Ma se io scrivo:

int a = 2;
int b = 3;
int c = 4;

prova(d,e)


Le variabili 'd' ed 'e' che valori avranno?
 
Rispondi
#8
Devi fare una cosa del genere:

Codice:
int main(){
...
int a, b, c;
...
prova(a,b);
...
}

prova(int c, int d)
{
...
}

Non puoi passare a una funzione dei valori non ancora dichiarati. Al massimo puoi fare: prova(10,15); (che è come fare: int a=10; int b=15; prova(a,b); )
 
Rispondi
  


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

Vai al forum:


Browsing: 1 Ospite(i)