[C++]Chiarimenti su una lezione della guida di HTML.it - Versione stampabile +- Creare Videogiochi - Game Developer (https://www.making-videogames.net/giochi) +-- Forum: Programmazione (https://www.making-videogames.net/giochi/Forum-Programmazione) +--- Forum: Programmazione in C C++ e C# (https://www.making-videogames.net/giochi/Forum-Programmazione-in-C-C-e-C) +--- Discussione: [C++]Chiarimenti su una lezione della guida di HTML.it (/thread-C-Chiarimenti-su-una-lezione-della-guida-di-HTML-it) |
[C++]Chiarimenti su una lezione della guida di HTML.it - ossen97 - 02-04-2011 Ciao a tutti! Volevo chiedere chiarimenti su questa lezione della guida di html.it: http://programmazione.html.it/guide/lezione/1175/chiamata-per-valore-e-per-indirizzo/ Vi ringrazio in anticipo, ciao! RE: [C++]Chiarimenti su una lezione della guida di HTML.it - Riddick - 02-04-2011 Ma fa pena questa guida.... Codice: #include <iostream.h> Ma sta usando il c++ o il c ? -.- Leggiti questo manuale: http://www.mediafire.com/?kokm15ynzjt RE: [C++]Chiarimenti su una lezione della guida di HTML.it - ossen97 - 02-04-2011 Usa tutti e due. In base a come girava all'autore xD RE: [C++]Chiarimenti su una lezione della guida di HTML.it - steve - 02-04-2011 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> 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> 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? RE: [C++]Chiarimenti su una lezione della guida di HTML.it - ossen97 - 02-04-2011 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 RE: [C++]Chiarimenti su una lezione della guida di HTML.it - steve - 02-04-2011 La & indica l'indirizzo della variabile (è un valore esadecimale). esempio: Codice PHP: int a = 10; Il * indica che è un puntatore, scrivendo: (così si capisce meglio come funziona un puntatore) Codice PHP: int a = 10; Scrivendo *p dico di darmi (o sovrascrivere) il valore che punta (ovvero il valore di a, 10) Codice PHP: int a = 10; 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. RE: [C++]Chiarimenti su una lezione della guida di HTML.it - ossen97 - 02-04-2011 Chiaro grazie Steve! Ma se io scrivo: int a = 2; int b = 3; int c = 4; prova(d,e) Le variabili 'd' ed 'e' che valori avranno? RE: [C++]Chiarimenti su una lezione della guida di HTML.it - steve - 02-04-2011 Devi fare una cosa del genere: Codice: int main(){ 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); ) |