| | | OFFLINE | | Post: 257 Post: 246 | Registrato il: 02/03/2016 Registrato il: 03/03/2016 | Sesso: Maschile | |
|
23/05/2016 17:04 | |
Parliamo di Malloc , delle variabili statiche e automatiche , parliamo di puntatori Parliamo ancora del puntatore perché dopo i grandi dati che immagazziniamo grazie i record che sono le strutture che abbiamo visto nel capitolo precedente, ci può essere d’ aiuto i puntatori e la funzione malloc non per ripetermi rivediamo i puntatori in breve il puntatore si costruisce come le variabili ma deve avere l’ asterisco (*) prima del suo nome ecco la sua sintassi (p=puntatore) : tipo_elemento *nome_puntatore ; int *p;
abbiamo creato il puntatore p, ora dobbiamo dargli la vera variabile che deve leggere logicamente deve essere dello stesso tipo intera nel nostro caso per assegnare una variabile al nostro puntatore p basta inserire la e-commerciale (&) prima della variabile (v= variabile):p= &v;
abbiamo assegnato al puntatore p la variabile v se io scrivo *p = 12; , ecco che la variabile vprende il valore di 12 perché come si era detto in precedenza, (nel capitolo 12 dei puntatori) il puntatore legge l’ indirizzo esatto di dove risiede la variabile dentro il disco nostro caso la variabile v , questo indirizzo lo legge grazie all’ operatore dell’ indirizzo & , stesso & che usiamo con la funzione scanf proprio per dargli un indirizzo di memoria e come detto il puntatore *p è lo specchio o alias di questo indirizzo , pertanto possiamo operare sulla variabile v direttamente o indirettamente tramite il suo puntatore p un esempio, inserisco il tutto su una riga per comodità testuale del forum se abbiamo :int a = 8, v, *p ; p = &v; *p = 2; *p = *p * a; // il risultato del printf è : 16 e 16 printf("puntatore =[%d] variabile =[%d]\nByMpt-Zorobabele\n ", *p, v);Nel capitolo 13 abbiamo parlato di typedef che serve per dichiarare variabili e tipi dati non primitivi , i tipi primitivi sono le semplici variabili … Già l’ array e tutto quello che possiamo costruire con typedef come le strutture struct e le unioni union questi sono tipi dati non primitivi, con typedef possiamo creare anche nuovi puntatori la soluzione è la stessa che avevamo visto che si divide in 2 parti parte 1 la vera dichiarazione , parte 2 il cambio del nome o dei nomi se dobbiamo creare più variabili uguali sintassi per i puntatori:typedef tipo_elemento *nome_elemento; nome_elemento nuovo_nome;
esempio : typedef int *puntatore; puntatore p; Ora il nostro nuovo puntatore p è operabile rivediamo il programmino di prima ma ora usiamo il nuovo dato p del nuovo puntatore di typedef come vedete cambia solo la dichiarazione del puntatore :typedef int *puntatore; puntatore p; int a = 8, v; p = &v; *p = 2; *p = *p * a;printf("puntatore =[%d] variabile =[%d]\nByMpt-Zorobabele\n ", *p, v); Fino ad ora abbiamo visto solo le variabili automatiche il suo tempo di vita di queste variabili èeffettuato automaticamente dal sistema centrale se sono inserite prima del main sono globali sotto il main sono locali, se sono dentro le varie funzioni o blocchi {} sono solo locali perquelle funzioni blocchi quando si esce dalla funzione o blocco quella variabile viene cancellata Ora parliamo delle variabili dinamiche , queste variabili siamo noi che le allochiamocon malloc e le de allochiamo con free da dentro la memoria centrale chiamata heap ( heap =mucchio) , queste variabili non hanno un identificatore o nome ma possono essere attribuite per mezzo del loro indirizzo attraverso i puntatori , questi comandi malloc e free sonousabili tramite la libreria che dobbiamo inserire con #include<stdlib.h> la stessa libreriache riconosce il comando system , la sintassi di malloc (memory allocation ) [ p=puntatore] :nome_puntatore = (tipo_puntatore *) malloc (sizeof (tipo_puntatore));dove nome_puntatore è il nome p, tipo_puntatore è il tipo della variabile puntata int,double,float ecc… sizeof(t_p) calcola il numero di bit o byte che occupa il tipo puntatore se è int occupa 2 byte, un float o int long 4 , un double 8 byte vediamo un esempio di allocazione di memoria su variabili primitive vedi il file prova 2 allegato dentro il forum http://im4.freeforumzone.it/up/49/24/944423184.txt Ciao grazie ByMpt-Zorobabele
Di questo testo dalla prefazione fino all’ 14° capitolo scritto, ho creato un testo PDF da scaricare lo trovate insieme dove rimane l’ elenco delle foto e ogni volta sarà aggiornato con i nuovi testi
http://www.freeforumzone.com/d/11266858/Elenco-figure-dei-comandi-della-programmazione-C-TESTO-PDF/discussione.aspx
|