Anteprima
Vedrai una selezione di 6 pagine su 23
Appunti sul linguaggio C, con variabili, strutture dati, puntatori, dichiarazione variabile Pag. 1 Appunti sul linguaggio C, con variabili, strutture dati, puntatori, dichiarazione variabile Pag. 2
Anteprima di 6 pagg. su 23.
Scarica il documento per vederlo tutto.
Appunti sul linguaggio C, con variabili, strutture dati, puntatori, dichiarazione variabile Pag. 6
Anteprima di 6 pagg. su 23.
Scarica il documento per vederlo tutto.
Appunti sul linguaggio C, con variabili, strutture dati, puntatori, dichiarazione variabile Pag. 11
Anteprima di 6 pagg. su 23.
Scarica il documento per vederlo tutto.
Appunti sul linguaggio C, con variabili, strutture dati, puntatori, dichiarazione variabile Pag. 16
Anteprima di 6 pagg. su 23.
Scarica il documento per vederlo tutto.
Appunti sul linguaggio C, con variabili, strutture dati, puntatori, dichiarazione variabile Pag. 21
1 su 23
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

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 arrayv=a+2;

Andrea De Dominicis andreadedominicis@studenti.unisalento.it

ATTENZIONE: abbiamo detto che i tipi di dato

strutturato hanno Left Hand Value.

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.
  1. 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;
  2. RIFERIMENTO o INDIRIZZO: in questo metodo agire sul parametro
equivale ad agire sull'alocazione di memoria del parametro attuale. Il passaggio del parametro è bidirezionale in quanto la funzione chiamata ha la possibilità sia di leggere che di scrivere all'interno della locazione del parametro attuale;

COPIA VALORE E RISULTATO: in questo metodo al parametro formale è associata una locazione di memoria differente da quella del parametro attuale. Durante l'invocazione della funzione il valore del parametro attuale viene copiato nel parametro formale. Al termine della funzione, il valore del parametro formale viene copiato nel parametro attuale. Dopo tale copia, lo spazio di memoria riservato per il parametro formale viene liberato. Il passaggio è bidirezionale in quanto la funzione chiamata ha la possibilità sia di leggere che di scrivere sul parametro attuale.

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;

Dettagli
Publisher
A.A. 2021-2022
23 pagine
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher deddu01 di informazioni apprese con la frequenza delle lezioni di Fondamenti di informatica e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università del Salento o del prof Epicoco Italo.