La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

.  I tipi di dati non primitivi sono gli array, le struct e le union.  Gli array sono degli aggregati di variabili dello stesso tipo.  La dichiarazione.

Presentazioni simili


Presentazione sul tema: ".  I tipi di dati non primitivi sono gli array, le struct e le union.  Gli array sono degli aggregati di variabili dello stesso tipo.  La dichiarazione."— Transcript della presentazione:

1

2  I tipi di dati non primitivi sono gli array, le struct e le union.  Gli array sono degli aggregati di variabili dello stesso tipo.  La dichiarazione di un array è della forma: o char parola[10];  In questo modo si dichiara la variabile parola come un array di 10 caratteri.  Il primo carattere `e contenuto in parola[0] e l’ultimo in parola[9].  Il C non controlla gli accessi agli array, quindi possiamo accedere all’elemento parola[15] senza che il compilatore produca nessun errore.  Ovviamente, questo accesso è errato ed il risultato è imprevedibile.

3  Inoltre possiamo definire array multidimensionali come: o char frase[20][10];  che definisce una variabile frase di tipo array con 20 elementi (numerati da 0 a 19), ed ogni elemento è a sua volta un array di 10 caratteri (numerati da 0 a 9).  Per accedere al quarto carattere del secondo elemento si scrive frase[1][3].

4  Gli array possono essere inizializzati nelle dichiarazioni, con la lista dei valori, separati da virgole, racchiusa tra parentesi graffe, ad esempio: o int tabella[4] = {10,23,34,45};  L’inizializzazione di un array multidimensionale corrisponde ad inizializzare ogni elemento dell’array con una lista. Ad esempio: o int a[2][3] = { {11, 12, 13}, {21, 22, 23}, o };  inizializza la prima riga dell’array con i valori 11, 12, 13 e la seconda riga con 21, 22, 23.

5  Equivalentemente, ma meno elegantemente, si può utilizzare: o int a[2][3] = {11, 12, 13, 21, 22, 23};  che produce lo stesso risultato.  Infatti gli elementi di un array sono memorizzati per righe, in indirizzi consecutivi di memoria. Quindi, nell’esempio precedente, l’array è memorizzato con il seguente ordine: o a[0][0], a[0][1], a[0][2], a[1][0], a[1][1], a[1][2]

6  Oltre agli array, il C mette a disposizione il tipo struct, per aggregare variabili di tipo diverso.  Ad esempio, con la dichiarazione: o struct laboratorio { char orario[20]; char aula; int studenti; o } lps;  si dichiara il tipo struct laboratorio, formato da 3 campi eterogenei, e contemporaneamente viene dichiarata la variabile lps di tipo struct laboratorio.

7  Il tipo può essere riutilizzato per successive dichiarazioni di variabili, con: o struct laboratorio lpr;  Per accedere ai campi di una variabile di tipo struct si utilizza l’operatore ‘.’.  Ad esempio lps.aula `e una variabile di tipo carattere

8  Per creare nuovi tipi si utilizza typedef. Ad esempio: o typedef struct { char orario[20]; char aula; int studenti; o } laboratorio;  definisce il tipo laboratorio come una struct di 3 campi.  Dichiarando la variabile lps di tipo laboratorio con: o laboratorio lps;  si ottiene lo stesso effetto della dichiarazione precedente.  La sintassi generale di typedef è: o typedef tipo variabile di tipo ;  e definisce un nuovo tipo con nome variabile di tipo.

9  Infine, il tipo union è simile al tipo struct con la differenza che tutti i campi sono memorizzati a partire dalla stessa locazione di memoria.  Ad esempio, con la dichiarazione: o union atomo { int posizione[3]; long velocita; o } j;  si definisce la variabile j di tipo atomo. Entrambe le variabili j.posizione e j.velocita sono memorizzate a partire dalla stessa locazione di memoria.  Quindi l’occupazione di un tipo union è data dalla massima occupazione dei suoi campi.

10  Ad esempio, le variabili var struct e var union dichiarate come segue:  struct { o int var_1 ; o char var_2;  } var_struct;  union { o int var_3 ; o char var_4;  } var_union;

11 Si noti che i due campi della variabile var union sono sovrapposti tra loro, e può essere utilizzato solo un campo alla volta. Inoltre, non c’è modo di sapere se la var union contiene, in un dato istante, un intero oppure un carattere.

12  L’uso pi`u tipico delle union prevede quindi che sia presente un campo discriminatore:  struct { o int tipo; /* discriminatore */ o union { o int campo1; o char campo2; o long campo3; o }  };  In questo modo, il programmatore può memorizzare nel campo tipo (sempre presente) un codice numerico che indichi il contenuto attuale della union (per esempio: 1 se l’ultimo valore memorizzato è un int, 2 per un char, ecc.).

13  Il linguaggio C non mette a disposizione nessun tipo predefinito per trattare oggetti di tipo stringa. Ù  Le stringhe sono quindi realizzate come vettori di caratteri.  La fine di una stringa viene delimitata dal carattere \0 (il carattere il cui codice ASCII è zero).  Ad esempio, la dichiarazione: o char stringa[6] = mango;  definisce la variabile stringa di 6 caratteri (l’ultimo carattere contiene il delimitatore \0).

14  Nella dichiarazione di stringhe inizializzate, è possibile omettere il numero di caratteri.  Il compilatore calcolerà automaticamente l’ampiezza dell’array per contenere la stringa.  In generale, una stringa `e definita nel seguente modo: o char nome-variabile [] = valore-iniziale-della-stringa ;  Quindi, dichiareremo semplicemente: o char stringa[] = mango;  Essendo una stringa un array, la dichiarazione precedente è equivalente a: o char stringa[] = {’m’,’a’,’n’,’g’,’o’,’\0’};

15  Il tipo stringa (realizzato come un array di caratteri) è fondamentalmente diverso dal tipo carattere.  Ad esempio, il carattere ‘a’ occupa 1 byte  Invece, la stringa a occupa sempre 2 bytes: il carattere ‘a’ seguito dal carattere ’\0’ che delimita la fine della stringa.  Si noti che, diversamente da Java, il linguaggio C utilizza un set di caratteri ASCII a 8 bit, e quindi rappresenta i caratteri con 1 byte.  Quindi, le dichiarazioni: o char stringa[] = "m"; o char carattere = ‘m’;  definiscono due variabili di tipo diverso, che occupano, rispettivamente, 2 bytes e 1 byte.


Scaricare ppt ".  I tipi di dati non primitivi sono gli array, le struct e le union.  Gli array sono degli aggregati di variabili dello stesso tipo.  La dichiarazione."

Presentazioni simili


Annunci Google