00 17/06/2016 10:48
Vettori Array puntatori vediamoli in grandi linee in C++ sono diversi dal uso che si faceva in C

I puntatori legge il contenuto dentro  un indirizzo della memoria  il puntatore è dichiarato con il * e deve avere la sua variabile o costante da leggere, tramite il simbolo &   int* PT = &variabile  il puntatore PT non legge la variabile per se stessa ma legge l’ indirizzo dove la variabile risiede dentro la nostra memoria del computer ecco un programma:

//prova puntatori :
#include<iostream>
using namespace std;
//inserisco una funzione   e 2 variabili qui area globale
int globale1 = 10 , globale2 = 8; 

void funzione () { // funzione con 3 variabili e 1 costante  

         int af1 = 2  , af2= 3 , af3;           af3 = af1 + af2; //somma delle variabili

         const int con = 10; // dichiarazione della costante 

         cout << "\n indirizzo di af1 "<< ( long ) &af1 <<"\n indirizzo di af2"<< ( long) &af2 
                <<"\n indirizzo di af3"<<( long) &af3 <<endl;

         cout <<"\n indirizzo di con"<<( long) &con <<endl; // indirizzo della costante


         cout <<"\n  totale di af1+af2 = af3 :"<<af3 <<endl;  

         }

int main ()

         { //inserisco 2 variabili locali

         int  locale1 = 10, locale2 = 60;

         cout <<"\n indirizzo di locale1 "<<(long) &locale1 << "\n indirizzo di locale2 "
                <<( long ) &locale2 <<endl;
         cout <<" indirizzo della funzione()  " <<( long) &funzione <<endl;

         cout <<"\n indirizzo di globale1 "<<( long) &globale1 <<"\n indirizzo di globale2 "
                <<( long) &globale2; 

         funzione ();           system ( "pause");    }  


Ecco il mio risultato che può cambiare da computer a computer e ad ogni volta che si
avvia il programma, ecco tutti gli indirizzi prodotti dal mio programma come
vedete la funzione e le variabili globali 1 e 2  hanno un numero all’ altezza dei 108…. Mentre l’indirizzi di af1-2-3  a_funzione_1 -2-3 ha altri indirizzi  come le locali1-2   163 nonostante af1-2-3 sia menzionate nell’ area  globale dentro la funzione stessa questo vuol dire che sono memorizzate quando vengono usate se vedete la differenza tra un indirizzo e l’ altro c’è 12 il mio computer usa 12 byte per ogni variabile int : 


 indirizzo di locale1 1638048
 indirizzo di locale2 1638036
 indirizzo della funzione()  10818401
 indirizzo di globale1 10858496
 indirizzo di globale2 10858500
 indirizzo di af1 1637812
 indirizzo di af2 1637800
 indirizzo di af3 1637788
 indirizzo di con 1637252   << indirizzo della costante 
  totale di af1+af2 = af3 :5      Premere un tasto per continuare . . .


 Quando noi inseriamo la e commerciale & andiamo a leggere l’ indirizzo della variabile , quando usiamo il puntatore * leggiamo il valore della variabile che abbiamo all’ indirizzo &, se noi dichiariamo ( int * a,b,c; )  solo a è il puntatore l’ altre sono solo semplici variabili b,c  con
typedef potremo fare diversamente per dichiarare più puntatori in un solo colpo ora bisogna farlo uno ad uno

I puntatori possono essere utilizzati in tutti i formati delle variabili non solo int ma anche char , long float ecc… 


Come la variabile e la costante viene inizializzata float  f = 10.34 ;  anche il puntatore va subito inizializzato dicendogli quale variabile deve essere collegata o puntata  possibilmente dobbiamo far rappresentare anche il nome che punta e capire subito che è un puntatore ognuno può usare un suo sistema   ptf  puntatore pf variabile f oppure Fp che è più visibile se dobbiamo inizializzare il puntatore  per la variabile f float* Fp = &f ;  ora noi sappiamo che Fp guarda nell’ indirizzo della variabile  f



Ora posso usare il puntatore, un uso che potrei fare è sostituire il valore della variabile stessa che vedo  *Fp = 34.10 ; ora il valore della variabile f non è  più 10.34 ma 34.10   potevamo certamente sostituire il valore di f direttamente con  f= 34.10;  ma lo scopo di usare i puntatori  è proprio per quelle situazioni in cui non è possibile sostituire o vedere  il valore diretto di una variabile dentro le funzioni o vettori 


Il puntatore è il punto di partenza dei vettori array come visto su la memoria di un computer è fatta in indirizzi noi possiamo prendere queste suddivisioni di indirizzi e possiamo unificarli per
tante variabili unite da un unico nome ma differenziate da spazi unici  il modo di far questo è l’ array o vettore  int  a[5] ;  dice che ho un array da 5 posizioni cosi si crea una memoria  5 variabili distinte ma con un solo nome ‘a’ e posso inserire 5 variabili  di tipo intero, un array o vettore inizia con la posizione a[0]a[1]a[2]a[3]a[4] in ogni spazio posso inserire un valore a[0] = 10;  a[4]= 1;    a[1]= 125055; ecc… dipende dal tipo di vettore che abbiamo inizializzato se è string possiamo inserire le parole vere non più come caratteri come era nel C



L’ array o vettore non è una normale variabile se viene usato il puntatore , con
il puntatore  possiamo usarlo solo contro il primo a[0] e non possiamo dare dei valori per
mezzo del puntatore come si faceva su int * Ap = &a;    *Ap = 23; questo lavoro non è ammesso 


Quando un puntatore punta verso un array  non serve inserire la & perché il puntatore già legge il suo indirizzo fisico nei puntatori possiamo usare per muoverci  il ++  cosi si sposta da una posizione all’ altra dentro lo stesso array o vettore pertanto Ap++  dal leggere a[0]  passa
al prossimo a[1] per lavorare al meglio dentro i vettori è consigliabile usare il for e il suo
indice inserito dentro il numero dei vettori un esempio per leggere dentro il vettore a [5]  :


for (int i=0; i< 5; i++)  cout << " a = [ "<< i <<"] = " <<  a[ i ] <<endl; 

dove il contatore i stampa il numero dell’ array da 0-4 a[0]    mentre l’ altro a 
stampa  il valore  che è scritto dentro il vettore 10   abbiamo a  [0] = 10 per proseguire  a  [1] = 125055  ecc… fino alla fine  a  [4] = 1  possiamo fare ugualmente per inserire i dati quando abbiamo vettori  con moltissimi indici introducendo sotto al cout un cin >> a   esempio :

for (int i=0; i< 15; i++) 
cout << " inserisci il valore  in a = [ "<< i <<"] = " <<endl;   cin >> a ;  

Man mano che il for gira ti chiede di inserire i valori dentro i rispettivi  15  indici  


 In C abbiamo appreso che ogni vettore costruiva una stringa ora in C++ tutto cambia , ogni posizione possiamo scrivere una stringa e non un carattere per far riconoscere le stringhe bisogna includere  il file  #include<string>  


Sia i vettori che i puntatori il C++ li usa diversamente dal C , cosi li vedremo  meglio all’ occorrenza nei prossimi capitoli 


Ciao  grazie da ByMpt-Zorobabele



Testo PDF aggiornato con questo ultimo capitolo  inserito lo trovate :


http://www.freeforumzone.com/d/11266858/Elenco-figure-dei-comandi-della-programmazione-C-TESTO-PDF/discussione.aspx

Anche qui di queste discussioni che inserisco faccio un testo PDF da poter
scaricare tutto il mio materiale è da utilizzare come desiderate  per il testo PDF vedi cartella
dedicata , ogni volta cambia ubicazione del testo  allora cambio il file e
lo inserisco  sempre dentro la  stessa cartella < file aggiornato ad oggi >


http://www.freeforumzone.com/d/11266858/Elenco-figure-dei-comandi-della-programmazione-C-TESTO-PDF/discussione.aspx


[Modificato da JehovaZorobabele 17/06/2016 11:19]