prima di iniziare a guardare il video vi ricordo se non lo siete già di iscrivervi al canale attivare la campanella delle notifiche lasciare un like e leggere sempre la descrizione del video benvenuti a tutti ragazzi in questo nuovo video oggi definiremmo i concetti di variabile e costante e andremo nel dettaglio a scoprire tutto a riguardo qualsiasi programma gestisce dei dati e informazioni e per fare ciò esistono le cosiddette variabili e costanti che ci permettono di lavorare con i valori durante l'intero programma iniziamo con le variabili e diciamo che una variabile rappresenta uno spazio di memoria
alterabile dove vengono memorizzati i valori ne esistono di varie categorie sempre seconda dell'uso però oggi vedremo quelle gestite all'interno del main e che vengono chiamate private o locali del main perché esistono e ci si può lavorare solo all'interno della funzione mail lo stesso discorso varrà per le variabili locali delle altre funzioni quando ne parleremo le variabili locali di una funzione si materializzano solo nel momento in cui vengono invocate per poi svanire quando terminano comunemente vengono identificate come variabili automatiche prima però di utilizzarle serve indicare il tipo di dato quindi i valori specifici con i quali
la variabile potrà lavorare e serve dichiararle al programma ed è possibile farlo in una qualsiasi posizione all'interno del main a patto che siano dichiarate prima di un qualsiasi loro utilizzo non posso per esempio visualizzare valori di una variabile se non l'ho mai dichiarata prima del suo utilizzo la formula base è scritta a sinistra e comprende lo specificare il tipo di dato il nome della variabile e poi eventualmente ma dipende dai casi inizializzare con un valore andiamo per sperti i tipi di dato specifici sono molti ma possiamo racchiuderli in un piccolo insieme composto da valori interi
e valori con virgola mobile per le variabili di tipo intero via inserito alla lista in ordine crescente dalla variabile con meno spazio di memoria e minor range di valori gestibili fino ad arrivare alla variabile con più spazio e più valori ea fianco c'è la loro specifica di conversione a destra invece c'è da porre un attimo attenzione quello che sto facendo è mostrarvi sempre in ordine crescente in output la grandezza in byte della variabile ea destra il range di valori con cui lavora innanzitutto e notate quello che vi ho detto nella scorsa lezione riguardo all'output con
il print f cioè di usare la specifica di conversione percentuale s per indicare anche i messaggi testuali inoltre negli argomenti notate l'uso dell'operatore un'ariosa head of interno il nome del tipo di dato side of viene impiegato per determinare la dimensione in byte di un array e un qualunque tipo di data più a destra invece trovate delle costanti scritte maiuscolo contenute nella libreria limits punto h ho inserito sopra sotto st di o punto h semplicemente mi sono serviti per indicare i limiti massimi e minimi per ogni variabile ricordo che se non avesse incluso quelle libreria non
avrei potuto utilizzare quelle costanti avvio la compilazione ed ecco a voi tutte le grandezze e i valori che gestiscono se si andasse oltre il limite consentito nel range delle variabili riceverai un errore di buffer overflow con la conseguenza di creare vulnerabilità di sicurezza e vediamo che char è la più piccola con una grandezza di un byte è la più grande è un sign and long long int chiariamo un attimo il discorso dei caratteri nella precedente elezione abbiamo visto il comando put chara chiamando in output un carattere e potevamo inserire all'interno delle tonde direttamente un numero
al quale corrisponde un simbolo oppure il simbolo stesso tra gli apici come fa quindi put char a utilizzare entrambi i metodi il valore attribuito uno specifico carattere è dipendente del sistema di codifica dei caratteri adottato dal sistema in uso quello più comune è la xi cioè un sistema di codifica dei caratteri a 7 bit basato sull'alfabeto inglese che codifica a 128 caratteri a partire dallo zero fino ai 127 su altri sistemi invece esiste una versione estesa della scia 7 bit denominata latin uno che offre la possibilità di rappresentare molti più caratteri grazie alla codifica a
8 bit cioè dallo zero fino a 200 55ª poi potete notare più volte la dicitura unsigned andando nel dettaglio cosa succede un intero consegno cioè signed int ha come valore massimo questa sequenza di uno in binario dove il primo bit a sinistra è utilizzato per il segno 60 e positivo al contrario uno è negativa quella sequenza corrisponde al valore di 2 alla quindicesima a meno uno in caso contrario unsigned in usa quel primo beat al sinister non più per il segno ma l'utilizzo all'interno del numero ecco quindi che il valore massimo si raddoppia risultando 2
alla sedicesima meno uno questo discorso vale ogni volta che leggete unsigned nella dichiarazione di una variabile ricordatevi che non possono però gestire i numeri negativi poiché sono stati rimossi dal regio e trasferiti in quelli positivi il ci permette di utilizzare anche i sinonimi elencate a sinistra e la scelta di utilizzare la forma estesa abbreviata sta a voi mentre nelle variabili dove non è specificato unsigned è sottointeso il sign dando la possibilità di gestire sia valori negativi che positivi un'ultima curiosità è quella che in vari compilatori e come nel mio caso la variabile int e unsigned
abbiano la stessa grandezza e range uguali a long int e unsigned in questo è dovuto a una libera scelta del compilatore che ritiene più adatta sulla macchina nella quale ad opera quindi su alcuni computer la variabile int e a4 baite in altri può essere due buy al contrario short e long rimangono sempre costanti con 2 e 4 buy per quanto riguarda le variabili con virgola mobile perciò quelle che gestiscono le cifre decimali a sinistra sempre in ordine crescente trovate le variabili con la specifica di conversione e a destra invece in output valori nuovamente anche qui
ho fatto l'uso dell'operatore size of per mostrare la grandezza delle variabili e delle costanti che però sono tenute all'interno della libreria flot punto h e non più in limits punto la sostanziale differenza tra flop double along double è la precisione chi viene raddoppiata ogni volta avviando la compilazione notiamo che la grandezza di flop e 4 byte 8 quella di double e 12 quella di long double che però non mi riesce a supportare i valori sulla console quindi vi riporto uno screen appartenente alla consolle della mia distro linux dove però gli viene fornita una grandezza di
16 byte il linguaggio c sotto questo punto di vista si può ritenere un linguaggio fortemente tipizzato dato che permette una scelta accurata delle variabili da poter utilizzare nel programma è importante dunque saper gestire anche la giusta memoria per le variabili il più delle volte in queste elezioni ci basterà utilizzare in e flop ma se dovessimo mai creare un programma che lavora con enormi valori o elevata precisione decimale dovremo scegliere attentamente quali tipi di variabile utilizzare esistono poi altri tipi di variabile che vedremo più avanti e altre categorie che al momento è troppo presto a parlare
quindi farò un ulteriore video di approfondimento sulle variabili intanto nelle prossime elezioni faremo uso di queste spiegate finora un altro tipo di variabile utile da utilizzare nelle strutture di controllo e la variabile booleana che sfrutta solo il valore zero che indica il falso e il valore 1 che indica il vero possono appunto essere impiegate per uscire da un ciclo al posto di utilizzare istituzioni di salto ma ciò lo affronteremo prossimamente la variabile booleana è stata introdotta a partire dal cin 99 e possiamo di chiamarla col trattino basso bull con l'abi rigorosamente maiuscola altrimenti possiamo includere
la libreria sdd bull punto h e utilizzare il sinonimo bull tutto minuscolo e usufruire delle parole chiave tu e forse senza il di creare questa libreria non possiamo usare queste funzionalità in sostanza il trucco è vero ha come valore l'uno mentre il falls ciò è falso ha come valore lo zero non c'è differenza per usare le parole chiave e i valori numerici per inciso nel cinco risponde al falso il valore zero e al vero tutto ciò che non è uguale a zero però viene tradotto automaticamente nel valore 1 faccio un esempio a destra dove egli
assegno come valore il numero 4 e poi metto in output il contenuto della variabile e risulta uno ricordatevi che gestisce solo lo zero e l'uno e tutto ciò che è diverso da zero e uno diventa automaticamente uno più avanti vedremo vari usi della variabile booleana altro aspetto importante oltre il tipo di dato è il nome che affidiamo la variabile i nomi devono per forza iniziare con una lettera e poi può proseguire con altre lettere o numeri è molto utile a migliorare la leggibilità del codice affidare nomi che rispecchiano il loro uso nel programma anche trattino
basso può essere utile per nomi molto lunghi a patto che non sia all'inizio infine bisogna badare all'uso delle maiuscole e minuscole perché nel c non sono considerati la stessa cosa a dichiarare in minuscolo e in maiuscolo è differente il genere si tende a scrivere il nome delle variabili in minuscolo e quello delle costanti tutto maiuscola le costanti al contro variabili non variano ma il loro contenuto rimane invariabile per tutto il programma se provassimo a modificare valore di una costante dopo avergliene fornito già in precedenza 1 avremo un errore possiamo dichiarare una costante in vari modi
il primo è quello di usare la direttiva cancelletto define nel preprocessore dopo l'inclusione delle librerie ciò permette di creare costanti simboliche e anche macro che però vedremo nel video apposito per creare una costante utilizziamo define specificando poi il nome della costante che vi consiglio di mettere sempre in maiuscolo e poi il valore da dare che può essere numerico intero o con decimali oppure letterali inserendo tra le virgolette la stringa di testo o tra gli apici il carattere questa costante e poi utilizzabile in tutto il programma richiamando solo il nome e la direttiva define non va
conclusa con il punto e virgola in genere si usano le costanti per simboli matematici come il pi greco che rimane costante oppure per definire la grandezza di vettori che vedremo un secondo metodo è quello di utilizzare l'attributo const davanti al tipo di variabile quindi si dichiara una normale variabile e l'attributo const la delinea come immutabile durante il corso del programma a differenza di design non dichiaro una variabile costante per poi usarla per definire la grandezza di un vettore per esempio sarebbe meglio define a quel punto però con const posso dichiarare costante direttamente un vettore e
quindi ogni suo valore contenuto sarà in variabile infine c'è una terza tipologia di costanti più particolari ed è l'enumerazione le numerazioni sono simili alle strutture riunioni che sono un argomento abbastanza difficile da trattare perché all'inizio del c però ritengo che possiamo già così lo stesso parlare delle numerazioni iniziando c ad abituare a questa sintassi che rivedremo in futuro si tratta di una lista di valori costanti introdotta dalla parola chiave e non è seguita da un tag opzionale è utile per dare un identificativo dopodiché all'interno delle parentesi graffe vengono elencati una serie di identificatori separati da
una virgola senza tipo di dato che rappresentano le costanti di enumerazione se non dichiaro alcun valore predefinito la serie di costanti riceverà a partire dalla prima il valore numerico 0 e incrementerà il valore di più uno per ogni costante fino all'ultima facendo un esempio a destra ho inserito alle sigle dei mesi dell'anno in mese di gennaio partirà dal valore zero fino ad arrivare all'ultimo mese quello di dicembre con il valore 11 oppure è permesso dare un valore di partenza alla prima costante e tutte le altre incrementeranno progressivamente sempre di più uno infine come ultima opzione
è possibile fornire a ogni costante un valore predefinito dove uno stesso valore può essere fornito più costanti ogni costante deve avere un nome singolo e unico cioè non possiamo ripetere i nomi di costanti più volti alcune volte devono fare delle operazioni aritmetiche con tipi di dato differenti c'è bisogno quindi che tutti gli operanti siano convertiti nello stesso tipo e la compressione può far perdere informazioni come nei casi seguenti di esempio assegnare un intero più lungo a uno più breve assegnare un numero in virgola mobile a un intero altre conversioni che permettono di ampliare il proprio
campo di variabilità senza perdita di informazione è per esempio quando converto un valore intero in un numero con virgola mobile poiché ora vengono gestiti anche decimali e che prima erano ignorati una conversione che avevamo già visto nella scorsa puntata era stato con il comando put char dove il parametro interno era con int ma anche inserendo un carattere tra gli apici potevamo visualizzarlo e abbiamo detto che ci viene in aiuto la codifica ascii però esiste un passaggio insidioso nel trasformare caratteri i numeri interi poiché il linguaggio non specifica se le variabili di tipo char siano quantità
con o senza segno questo significa che a seconda dell'architettura la conversione potrebbe risultare negativa a causa del fatto che su alcune macchine il beat più a sinistra che sia uno subisce la trasformazione in negativo risultando come estensione del segno mentre su altre la conversione da chara int prevede semplicemente l'aggiunta di bit nulli a sinistra dando sempre risultato positivo per garantire compatibilità è bene usare gli attributi signed e un sound esistono le compressioni implicite ed esplicite a quelle implicite sono conversioni aritmetiche che avvengono nei calcoli come nell'edizione moltiplicazioni dove l'opera andò di tipo inferiore passa a
quello superiore prima che proceda all operazione in genere in assenza di sperandii privi di segno e sufficiente attenersi a queste regole di massima elencate a sinistra le conversioni esplicite sono invece imposte in qualsiasi espressione grazie all'operatore un'area detto cast durante quindi un'operazione si può specificare il tipo di dato davanti all'espressione come nell'esempio a destra la differenza tra le due conversioni è che quella esplicita con il cast genera il valore appropriato che si vuole utilizzare senza alterare la variabile stessa come nella conversione implicita ora c'è una rimozione o aggiunta di bit la lezione è conclusa se
avete qualcosa da chiedere fatelo pure nei commenti cercherò di rispondervi se non siete già iscritti al canale iscrivetevi seguitemi su telegram e su instagram e noi ci vediamo un prossimo video ciao ragazzi