Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
Costruttore Struct
Il costruttore struct permette di definire un tipo di dato come insieme di elementi eterogenei (ogni elemento può avere un tipo di base differente). Si utilizza la seguente sintassi:
struct <nome struttura> { <tipo esistente> <nome campo>; <tipo esistente> <nome campo>; ... <tipo esistente> <nome campo>; };
struct <nome struttura> nome variabile (questa è la dichiarazione della variabile)
Per esempio:
struct dipendente { int ID; float stipendio; int eta; }; struct dipendente var1;
Il nome della variabile (in questo caso var1) rappresenta il contenitore dei campi presenti nella struttura, per poter andare a modificare il singolo campo della mia variabile strutturata devono utilizzare la 'dot' notation, la 'dot' notation è una sintassi che ci permette di leggere/scrivere in una delle sue parti.
Un esempio della dot notation può essere:
var.ID = 22; var1.stipendio = 1862.4;
La variabile
Una variabile di tipo struttura può essere dichiarata sia come LVALUE che come RVALUE. Pertanto è possibile assegnare una variabile di tipo struttura.
Per rappresentare l'allocazione in memoria, si può utilizzare la seguente sintassi:
<struct esempio> a[5];
La struttura "esempio" è composta da tre campi: un intero "i", un float "f" e un carattere "g". L'array "a" è un array di 5 elementi, dove ogni elemento è una struttura.
Ad esempio, per assegnare il valore 8.0 al campo "f" del quarto elemento dell'array "a", si può utilizzare la seguente sintassi:
a[3].f = 8.0;
Se si desidera utilizzare un puntatore per accedere ai campi della struttura, si può utilizzare la seguente sintassi:
struct esempio *p; p = a + 1; (*p).f = 4.0;
Un esempio di dichiarazione di una struttura "st" con tre campi: un array di interi "i", un array di float "f" e un array di caratteri "c".
struct st { int i[5]; float f[5]; char c[5]; };
Per scrivere un valore nel quarto elemento del campo "f" della struttura "s", si può utilizzare la seguente sintassi:
s.f[3] = 8.0;
È possibile creare un array di array utilizzando la sintassi seguente:
<tipo> nome_array[dim1][dim2];
a[3][5];
Esempio di array di array:
Andrea De Dominicis andreadedominicis@studenti.unisalento.it
Questa scrittura si legge nel seguente modo: LEGGO DALL'INTERNO VERSO L'ESTERNO quindi questa sintassi equivale ha un array di 3 elementi dove ogni elemento è a sua volta un array di 5 elementi.
aa5a[2][3]=5;
Per capire quale elemento bisogna andare a prendere leggiamo da sinistra verso destra, quindi in questo caso prendiamo come primo valore a[2] e capiamo che ci troviamo nel terzo array, dopodiché prendo [3] e prendo la quarta cella dell'array individuato nel passaggio precedente.
p=a[1]+2;
visto che a[1] indica l'indirizzo del primo elemento del secondo array se aggiungessimo 2 avremmo il seguente risultato:
p[5]=12; 12
Questo è dovuto al fatto che le celle di memoria sono contigue
int **v; dichiarazione di un puntatore per un array di arrayv=a+2;
Andrea De Dominicis andreadedominicis@studenti.unisalento.it
ATTENZIONE: abbiamo detto che i tipi di dato
Possiamo usare uno stratagemma per dare un Left Hand Value agli array.
ESEMPIO:
struct esempio1 {
int[5];
float f;
}
struct esempio1 var1, var2;
var1=var2;
struct esempio2{
int a[8];
}
Struct esempio2 var3,var4;
var3=var4;
TYPEDEF
Typedef è una parola del nostro linguaggio che ci permette di assegnare un nuovo nome di un tipo di dati.
Si utilizza con la seguente sintassi:
typedef <costruzione tipo > <nome nuovo tipo>
Per esempio:
typedef int anno;
anno a;
typedef struct {
int giorno;
int mese;
int anno;
} data;
In questo il nuovo nome sarà data -> data day;
Utilizzo il tipo data per assegnare la variabile day
Andrea De Dominicis andreadedominicis@studenti.unisalento.it
typedef char string[30]; string s;
typedef enum{vero,falso} bool;
VOID
Il tipo di dato VOID non può essere utilizzato per le variabili, può essere utilizzato con le funzioni e con i puntatori.
Un puntatore void è una variabile che contiene un indirizzo.
non si va a specificare qual è il tipo di dato referenziata da p, quindi quando non si vuole definire oppure non si riconosce a priori cosa conterrà la cella il cui indirizzo sarà iscritto dentro p, allora andremo a dichiarare la nostra variabile puntatore a una cella void ovvero una cella il cui tipo non viene specificato durante la dichiarazione. Ciò permette di utilizzare la stessa variabile p puntatore per riferirmi a celle che possono avere tipi differenti, senza avere più variabili puntatori differenti.
FUNZIONI
Una funzione è il costrutto che permette di implementare un operatore definito dall'utente che applicato su un insieme di operandi produce un risultato. La funzione può anche essere intesa come la definizione di un sottoprogramma che è possibile richiamare da una funzione chiamante. La funzione principale eseguita all'avvio di un'applicazione è denominata MAIN. Generalmente si crea una funzione quando
tipo risultato> <nome funzione> <elenco parametri con tipo e nome del parametro> { <corpo della funzione> }dato>{ <corpo della funzione>return 0}
I parametri della funzione vengono anche detti PARAMETRI FORMALI
CHIAMATA A UNA FUNZIONE
Una qualunque applicazione scritta in C deve avere obbligatoriamente come minimo la funzione MAIN,
questa funzione è la funzione principale della nostra applicazione, è la prima ad essere invocata dal Sistema
operativo quando l’applicazione viene avviata.
Tutto ciò che viene scritto nella funzione MAIN sono le istruzioni che vengono eseguite per prima,
all’interno della funzione MAIN possiamo eventualmente richiamare altre funzioni che a loro volta possono
eventualmente richiamare altre funzioni e così via.
Il valore restituito dalla funzione main tipicamente rappresenta un codice di errore:
- 0 se il programma è terminato senza errori;
- 0 se il programma è terminato con errore.
La funzione main può essere dichiarata con la seguente sintassi:
int main (int argc , char ** argv)
argc e argv sono
funzione, ovvero il tipo di ritorno della funzione e i tipi dei parametri che accetta. Esempio di chiamata di una funzione: ```html
nome_funzione(valore1, valore2, valore3);
```
Dove `nome_funzione` è il nome della funzione da richiamare e `valore1`, `valore2`, `valore3` sono i valori da passare come parametri.
La dichiarazione di una funzione prevede la specifica del tipo di ritorno della funzione, il nome della funzione e i tipi dei parametri che accetta.
Esempio di dichiarazione di una funzione:
```html
tipo_ritorno nome_funzione(tipo_parametro1 parametro1, tipo_parametro2 parametro2) {
// corpo della funzione
}
```
Dove `tipo_ritorno` è il tipo di dato che la funzione restituisce, `nome_funzione` è il nome della funzione, `tipo_parametro1` e `tipo_parametro2` sono i tipi dei parametri che la funzione accetta, e `parametro1` e `parametro2` sono i nomi dei parametri.
La funzione può essere definita all'interno del file sorgente o in un file di intestazione separato, e può essere richiamata da altre parti del programma.- COPIA VALORE: il parametro formale occupa una locazione di memoria differente dal parametro attuale. Durante l'invocazione alla funzione e prima di eseguire la prima istruzione della funzione, avviene una copia del valore del parametro attuale nel parametro formale. Al termine della funzione la locazione di memoria riservata al parametro formale viene deallocata. Il passaggio è unidirezionale in quanto la funzione chiamata non ha la possibilità di modificare il contenuto del parametro attuale;
- RIFERIMENTO o INDIRIZZO: in questo metodo agire sul parametro
Andrea De Dominicis andreadedominicis@studenti.unisalento.it
Il passaggio dei parametri in C avviene solo ed esclusivamente per copia.
valore. Nonostante ciò, grazie all'uso dei puntatori, è possibile eseguire una comunicazione bidirezionale tra funzione chiamante e chiamata passando (per copia) l'indirizzo della locazione memoria del parametro attuale in modo che la funzione chiamata possa modificarne il valore.
ESEMPIO DI PASSAGGIO PER COPIA VALORE SCOPE DI UNA VARIABILE
Lo scope di una variabile è la regione di codice all'interno della quale la variabile è visibile.
Le scope di una variabile può avere estensione:
VARIABILI GLOBALI: tali variabili sono visibili nel file nel quale sono dichiarate;