00 5/11/2016 4:04 PM



Il C non ha delle vere e proprio set  per scrivere le parole , essi si rappresentano con le stringhe ovvero con l’ Array monodimensionali il suo costrutto è semplicemente :

char nome [8]= “scatola” ;


Come nell’ Array monodimensionale possiamo non inserire il numero di caratteri da usare ma è da considerare sempre un carattere in più di quello che abbiamo, questo carattere lo mette in automatico il compilatore  e è un carattere nullo \0 che dice al compilatore dove finisce la stringa , come sempre l’ array parte sempre da 0 fino all’ ultimo carattere dove trova la chiusura della stringa \0

Altro modo di inserire o inizializzare una stringa di caratteri può essere come si fa con l’ array dei numeri ovvero :

char nome [] = {‘s’,’c’,’a’,’t’,’o’,’l’,’a’,’\0’} ;


forse è più comodo usare come su , anche qui se inizializzato l’ array di stringhe non serve inserire dentro []  il numero come per le matrici ,anche qui come per l’ array normale si inizia a contare da 0, 1, 2, ecc



La stringa viene richiamata dal carattere %s  , pertanto sulla funzione  scanf e printf si inserisce la dicitura %s  in scanf non serve più inserire il simbolo  & che è il richiamo del puntatore pertanto scriveremo :

scanf(“%s”, nome_stringa );



Nel Compilatore C   abbiamo una libreria chiamata <string.h> che dobbiamo includere , questa libreria ci
offre delle funzioni per lavorare su questi array di stringhe vediamo quelle più usate  :



STRCPY serve per copiare una stringa in un’altra

STRCAT concatena 2 stringhe

STRCMP confronta 2 stringhe

STRCHR cerca un carattere in una stringa

STRSTR cerca una stringa in un'altra stringa

STRLEN ci restituisce la lunghezza della stringa


Per altre funzione e non solo per <STRING> ma per tutti i file header  (*.h) del C si può vedere in Wikibooks

https://it.wikibooks.org/wiki/C/Appendice/Librerie_standard


Il puntatore è l’ indirizzo fisico di una variabile puntata esempio abbiamo moltissime scatole che sono le nostre variabili queste scatole sono riposte nei scaffali  i scaffali sono la memoria del Pc, noi con il puntatore troviamo subito la nostra variabile che usiamo , ovvero troviamo subito quella scatola riposto in quella fila di quel scaffale numerato
sequenzialmente  , come le variabili o l’array prima dobbiamo dire che tipo di puntatore abbiamo che va in base alla
variabile che dobbiamo leggere allora prima vediamo che tipo  è int , double , float, char, trovato
questo  mettiamo il nome  ecco il puntatore viene creato con l’
asterisco (*) allora abbiamo  p=puntatore  int ,  questo puntatore poi deve leggere una variabile int , inizializzo anche la variabile var = 5 che poi leggeremo  ;

int  p* ,var= 5;

ora il nostro puntatore  p deve leggere la nostra variabile var che è inizializzata a 5 (var= 5) per fare ciò :

p = &var ; 

Ora il puntatore  p va dalla variabile  var e legge in quale posizione è inserita la variabile  var dentro il nostro magazzino
,  se noi leggiamo il puntatore p e la variabile &var ci restituisce la posizione, se invece leggo *p e var mi restituisce  il valore 5,  la memoria che usiamo del Pc di solito è in formato sequenziale di posizioni  e ogni variabile viene scritta
in una parte libera della nostra memoria non è detto che per forza 2 nostre  variabili  siano inserite vicine sequenzialmente

L’ operatore & (e commerciale)    è l’ operatore dell’ indirizzo legge l’ indirizzo o la posizione dentro la nostra memoria che utilizziamo, questo  si applica solo ad contenuti che già esiste in memoria esempio alle variabili esistenti, una variabile non inizializzata (var = 5) può dare numeri a caso 

L’ operatore * (asterisco)  questo è l’operatore che legge il valore reale della variabile che leggiamo ovvero *p ci produce 5 questo operatore si chiama   de referenziare dall’ inglese (dereferencing) , se noi facciamo  ( *p = 8 ; ) , ecco che la
variabile var in lettura cambia il suo valore e diventa 8 perché noi alla posizione della variabile  var abbiamo cambiato il suo contenuto tramite il puntatore *p


Questi puntatori possiamo usarli anche con l’ array [] sia che essi sia stringhe che sia numerici basta far riferimento i suoi indici per leggere l’ indirizzo di :



   main () {
 
char sc[]=”scatola”;    int  x; 
  
sc[7] = &x; 

  printf (“ L’indirizzo di sc[7] e’ -> %d “,&x);

   system(“pause”); }



Sembra che l’ array e il puntatore siano diversi effettivamente nel C sono identici ma utilizzati diversamente il vettore o array quando vengono creati si crea un puntatore nella memoria che usiamo e si riserva tanto spazio per quanto è grande l’ array secondo il tipo e la grandezza  ecco 2 scritture uguali, abbiamo v vettore  :



main (){    int v[]= {53,45,78};  

                       printf(“leggiamo il secondo elemento del vettore  : %d\n ”,v[1]);

                       printf(“leggiamo il secondo elemento del vettore  : %d\n ”,*(v+1)); 



 Passaggio dei puntatori verso le funzioni, abbiamo visto che è possibile lavorare con le funzioni il C ci permette di lavorare direttamente sulle funzione non elaborando i dati copia  che sono volatili, ovvero che si cancellano appena chiusa la funzione , ma lavorando proprio con i puntatori lavorare proprio con l’ indirizzo fisici  reali delle vere variabili alla fine è meglio lavorare sulle funzioni con i stessi puntatori o array 

Comunque non andiamo dentro oltre perché poi con il C++ non si usa più ,tanto poi vedremo altro diversamente


Prossimamente vedremo altri tipi di dati definiti da noi  sempre qui in C 


Ciao grazie  ByMpt-Zorobabele  Di questo testo dalla prefazione fino all’ 12° 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