PDA

Visualizza la versione completa : [C++] Puntatori


caisers
03-07-2017, 16:25
Salve a tutti.

Sto imparando il C++ da un pò di tempo.
Ma ancora non mi è chiaro l'utilizzo dei puntatori, dove e perché applicarli.

Sò benissimo a cosa servono. ( puntare determinate celle di memoria o un oggetto)

Sò utilizzarli, dichiararli e manipolarli. Ma ancora non capisco il loro uso
principalmente dove venga fatto.

Mi spiego meglio...

Se voglio modificare un determinato valore ad un certo indirizzo di memoria.
Sò che bisogna muoversi in un determinato modo.

Un esempio.



DWORD indirizzo = 0x004D2038;
DWORD offset = 0x3c;
int valore

DWORD valore_indirizzo = ReadProcessMemory(_hwnd,(void*)indirizzo+offset,&valore,sizeof(valore),NULL);




Altro esempio





struct blocco
{
int id;
int x;
int y;
}

QList<blocco> *blocchi = new QList<blocco>();



blocco b;
b.id = 0;
b.x = 10;
b.y = 10;

bloccchi->Insert(0,b);



in questo esempio ho dichiarato blocchi come puntatore.
ma avrebbe funzionato ugualmente anche se non fosse stato un puntatore.

stessa cosa se provo ad istanziare una classe.

Posso farlo sia con un puntatore o una normalissima variabile.
Ed in infine per ottenere sempre la stessa e medesima funzione o oggetto.
La domanda che mi viene da chiedere è:

Perché utilizzarli quando si può anche evitare di farlo?

chiedo scusa se magari potete interpretare il mio messaggio come da ignorante.
Ma vorrei solo capire dove e come utilizzarli ma sopratutto perché utilizzarli.
Mi sarebbe di aiuto anche una breve guida.
Grazie in anticipo.

Scara95
03-07-2017, 22:31
Implementa una lista concatenata semplice

lucavizzi
08-07-2017, 12:40
Se passi una variabile, questa viene passata "per copia", con conseguente raddoppio nell'uso di memoria.
Se, invece, passi un puntatore, la variabile non viene sdoppiata, stai passando una referenza a quell'allocazione di memoria.

I puntatori, quindi, ti consentono di risparmiare memoria e di poter "lavorare" su un unica allocazione di memoria da punti/ambiti del software diversi.

Loading