ciao. sto studiando c++ per l'università. vorrei chiedervi alcune domande sui puntatori, perchè non mi sono proprio chiari dal tutto.
1. se faccio (int *a) inizializzo un nuovo puntatore; a cosa punta però questo puntatore. penso a un valore a caso (forse a NULL?). però ho visto che se inizializzo solo il puntatore (e nessun'altra variabile) punta a un indirizzo molto vicino al suo (cioè facendo cout<<a , cout<<&a risultano due indirizzi molto vicini fra loro). se però prima della variabile puntatore ne inizializzo un'altra (es. int b) il puntatore punta all'indirizzo 0000. come mai?
2. faccio (int a, int b): sono due variabili non puntatore ma normali. vedendo il loro indirizzo in cui sono state posizionate, ha un indirizzo piu basso la variabile inizializzata dopo (in questo caso b). come mai?? (es &a=x1000, &b=x999)
3. mi è stato spiegato che gli array possono essere di due tipi: statici o dinamici. allora i primi sono quelli inizializzati normalmente (es. int a[10]), mentre i secondi inizializzati per mezzo di puntatori (es. int *a, a=new int[10]). poi mi è stato detto che il nome che diamo all'array (in questo caso a) corrisponde all'indirizzo in cui l'array è posizionato. ma questo accade solo per gli array dinamici, vero? cioè per vedere l'indirizzo di a per un array statico deve fare cout<<&a (oppure cout<<&a[2] per vedere l'indirizzo ad esempio del 3 elemento). invece per gli array dinamici per vedere l'indirizzo basta fare cout<<a (che quindi dovrebbe corrispondere a cout<<&a[0]). perchè se invece facciamo cout<<&a vedo l'indirizzo non del primo elemento dell'array, ma l'indirizzo del puntatore a (che punta all'array creato con l'istruzione new)
4. inizializzo un puntatore con (int *pa); poi lo faccio puntare ad un intero mediante l'istruzione (pa=new int). quindi cosi automaticamente il puntatore pa punta al nuovo intero allocato? ma quindi è la stessa cosa di fare (int *pa, int a, pa=&a)?
ma se faccio (cout<<pa) viene stampato l'indirizzo del puntatore pa o dell'intero allocato? io penso l'intero.
5. inizializzo un puntatore con (int *pa); poi lo faccio puntare ad un intero mediante l'istruzione (pa=new int). poi tolgo l'allocazione del nuovo intero mediante l'istruzione (delete). a cosa punta ora il puntatore?
spero mi abbiate sopportato in tutta questa serie di lunghe domande e che mi abbiate capito e che potete rispondermi.
se ho sbagliato in qualche ragionamento sarei grato se mi rispondete e mi correggete.
grazie in anticipo.
ciao edoardo.