DOMANDA Puntatori domandina semplice

Robert T.

Utente Attivo
Tralasciando codice irrivelante per questa domanda, qual'è la differenza tra questo codice e l'altro? fanno tutti e due la stessa cosa.

Codice:
int a = 2;
int *Ptr;
*Ptr = a;
Codice:
int a = 2;
int *Ptr;
Ptr = &a;
 

rodhellas

Utente Attivo
1,480
398
Hardware Utente
CPU
Intel i5 3470
Scheda Madre
AsRock H77 pro4/mvp
Hard Disk
120GB SSD + 1TB HD
RAM
12GB Corsair XMS3 1333mhz
Scheda Video
Gigabyte GTX 960 OC
Scheda Audio
Integrata
Monitor
SyncMaster 223BW
Alimentatore
Antec HCG-520M
Case
Thermaltake Commander Ms-i Snow Edition
Sistema Operativo
Windows 10 64bit
Nel primo, dici che il valore puntato da Ptr è uguale ad a, nel secondo assegni l'indirizzo della variabile a Ptr
 

BAT00cent

Utente Attivo
1,000
428
Hardware Utente
Non mi pare che facciano la stessa cosa
il primo codice non assegna un indirizzo alla variabile puntatore Ptr
ma cerca di assegnare un valore al contenuto da essa puntata (che non c'è)
 

Bonfi97

Nuovo Utente
Nel primo caso staresti assegnando al indirizzo puntato da Ptr il valore di a (però Ptr non è stato inizializzato, quindi può puntare ad un indirizzo a caso oppure a NULL, a seconda del compilatore, quindi quell'assegnazione darà errore al 99% dei casi. Prima di utilizzare Ptr quindi gli devi dare un indirizzo a cui puntare, che può essere una variabile come a, oppure uno spazio di memoria allocato dinamicamente con una malloc/calloc).
Nel secondo caso invece assegni a Ptr l'indirizzo di a, quindi ogni volta che userai *Ptr accederai al valore di a. In questo caso sì che puoi ora scrivere *Ptr = a qualcosa, poiché Ptr è stato inizializzato e punta ad un indirizzo valido.
 

Entra

oppure Accedi utilizzando