• Non ci sono risultati.

Tipi di dato

N/A
N/A
Protected

Academic year: 2021

Condividi "Tipi di dato"

Copied!
5
0
0

Testo completo

(1)

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 1

FONDAMENTI DI INFORMATICA

Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI

Facoltà di Ingegneria Università degli Studi di Udine

Linguaggio C Variabili e tipi di dato

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 2 Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright e dalle disposizioni dei trattati internazionali. Il titolo ed i copyright relativi alle slides (ivi inclusi, ma non limitatamente, ogni immagine, fotografia, animazione, video, audio, musica e testo) sono di proprietà degli autori prof. Pier Luca Montessoro e ing. Davide Pierattoni, Università degli Studi di Udine.

Le slide possono essere riprodotte ed utilizzate liberamente dagli istituti di ricerca, scolastici ed universitari afferenti al Ministero della Pubblica Istruzione e al Ministero dell'Università e Ricerca Scientifica e Tecnologica, per scopi istituzionali, non a fine di lucro. In tal caso non è richiesta alcuna autorizzazione.

Ogni altro utilizzo o riproduzione (ivi incluse, ma non limitatamente, le riproduzioni su supporti magnetici, su reti di calcolatori e stampe) in toto o in parte è vietata, se non esplicitamente autorizzata per iscritto, a priori, da parte degli autori.

L'informazione contenuta in queste slide è ritenuta essere accurata alla data della pubblicazione. Essa è fornita per scopi meramente didattici e non per essere utilizzata in progetti di impianti, prodotti, reti, ecc. In ogni caso essa è soggetta a cambiamenti senza preavviso. Gli autori non assumono alcuna responsabilità per il contenuto di queste slide (ivi incluse, ma non limitatamente, la correttezza, completezza, applicabilità, aggiornamento dell'informazione).

In ogni caso non può essere dichiarata conformità all'informazione contenuta in queste slide.

In ogni caso questa nota di copyright e il suo richiamo in calce ad ogni slide non devono mai essere rimossi e devono essere riportati anche in utilizzi parziali.

Nota di Copyright

Fondamenti di Informatica - Linguaggio C - Variabili e tipi di dato

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 3

Tipi di dato

• Le variabili e le costanti sono gli identificatori delle aree di memoria dove andranno collocati i dati

• Il C è un linguaggio tipizzato, ovvero è necessario specificare il tipo associato a ciascuna variabile e costante

• Il tipo determina come esse vengano memorizzate e manipolate dal programma

• Esistono due categorie di tipi di dato:

– tipi di dato predefiniti dal linguaggio, o fondamentali

interie in virgola mobile

– tipi di dato definibili dall'utente, o derivati

tipi per enumerazione e tipi per composizione

Fondamenti di Informatica - Linguaggio C - Variabili e tipi di dato

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 4

Nomi di variabili: sintassi

• I nomi delle variabili devono essere identificatori validi

• Convenzioni:

– lettere minuscole per i nomi delle variabili – caratteri tutti maiuscoli per i nomi delle costanti

(es. contatore vs. PI_GRECO)

Fondamenti di Informatica - Linguaggio C - Variabili e tipi di dato

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 5

Tipi di dato interi

• tipo intero

• int: intero con segno rappresentato con almeno 2 byte

• short int(o short - forma sconsigliata): intero con segno rappresentato con almeno 2 byte

• long int(o long - forma sconsigliata): intero con segno rappresentato con almeno 4 byte

• long long int(o long long - forma sconsigliata): intero con segno rappresentato con almeno 4 byte (standard C99)

• tipo carattere

• char: è un singolo byte, in grado di rappresentare un numero intero su 8 bit oppure uno qualsiasi dei caratteri ASCII

Fondamenti di Informatica - Linguaggio C - Variabili e tipi di dato

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 6

Relazione tra i tipi interi

sizeof (char) = 1

sizeof (short int) ≤ sizeof (int) sizeof (int)

≤ sizeof (long int)

NOTA: la funziona sizeof restituisce la dimensione in byte del tipo passato come argomento

(2)

Fondamenti di Informatica - Linguaggio C - Variabili e tipi di dato

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 7

Tipi di dato interi e architetture

• Le moderne architetture dei calcolatori prevedono per i tipi di dato interi un’allocazione della memoria fortemente dipendente dall’hardware

• In una macchina con parallelismo a 16 bit (es. un PC con DOS o Windows 3.1):

– int è un intero di 16 bit – short intè un intero di 16 bit – long intè un intero di 32 bit

• In una macchina con parallelismo a 32 bit (es. un PC con Linux o Windows 9x/NT):

– intè un intero di 32 bit – short intè un intero di 16 bit

– long intè un intero di 32 (o talvolta di 64) bit – long long intè un intero di 64 bit

Fondamenti di Informatica - Linguaggio C - Variabili e tipi di dato

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 8

Tipi di dato interi

• Esistono anche dei qualificatori applicabili ai tipi di dato interi (char e int): essi sono signed e unsigned

– i tipi int sono implicitamente signed e rappresentano i numeri in complemento a 2

– i tipi unsigned sono sempre positivi o nulli, e rappresentano i numeri in binario puro

– una variabile di tipo char può avere o meno il segno, ma in ogni caso i caratteri stampabili sono sempre positivi

– per rappresentare correttamente il carattere End-Of-File (EOF, ovvero il CTRL-Z o CTRL-D della tastiera) che vale -1, talvolta si usa il tipo int anche per i caratteri

Fondamenti di Informatica - Linguaggio C - Variabili e tipi di dato

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 9

Esempi di variabili di tipo intero:

int x;

long int fattoriale_di_x;

short int anno_nascita;

unsigned short int contatore;

Esempi di variabili di tipo carattere:

char carattere_letto;

unsigned char contatore;

Tipi di dato interi

è un contatore modulo 255

Fondamenti di Informatica - Linguaggio C - Variabili e tipi di dato

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 10

Tipi di dato in virgola mobile

• In C sono disponibili tre tipi di dato in virgola mobile:

float

: rappresentato su almeno 4 byte

double

: rappresentato su 8 byte, con 11 bit

per l'esponente (doppia precisione)

long double

: rappresentato su 10 o 12 byte, con 15 bit per l'esponente (quadrupla

precisione)

Fondamenti di Informatica - Linguaggio C - Variabili e tipi di dato

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 11

Costanti

• Le costanti intere possono essere specificate in decimale (1234), ottale (01234, corrisponde a 12348) o esadecimale (0xFF, per FFh)

– Una costante intera, come 1234, è un int – Una costante intera seguita da una l (o L), come

123456789L, è una costante long int – Una costante intera seguita da ll (o LL), come

123456789LL, è una costante long long int – Una costante intera senza segno è terminata da una u

(oppure U), come 2345U o 0xABCDU

– I suffissi ul (o UL) indicano una costante unsigned long int, come 123456789UL

– I suffissi ull (o ULL) indicano una costante unsigned long long int, come 123456789ULL

Fondamenti di Informatica - Linguaggio C - Variabili e tipi di dato

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 12

Costanti

• Le costanti floating-point contengono il punto decimale, oppure un esponente, oppure entrambi

• Il punto decimale (NON la virgola) separa la parte intera da quella frazionaria; la lettera e (oppure E) separa la mantissa dall'esponente

• Per default il loro tipo è sempre double 123.4

1e-5 6.22e23

• Il suffisso f (o F) indica una costante float, come 3.14F

• Il suffisso l (o L) indica una costante long double, come 3.1415926535897932e2L

(3)

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 13

Costanti

• Una costante carattere è un intero scritto sotto forma di carattere racchiuso tra due apici, come '$'

• Il valore di tale costante è il valore numerico del codice ASCII di quel carattere

Esempio: '0' ha valore 48 nel codice ASCII

• I caratteri di controllo, oppure quelli non ottenibili da tastiera, si rappresentano con una sequenza di escapeche inizia con il backslash \

– Esempi: '\n' , ritorno a capo (CR, ASCII 0x0A) '\0', carattere nullo (ASCII 0x00) '\\', backslash (ASCII 0x5C)

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 14

Costanti

• Si può generalizzare l'uso della sequenza di escape per rappresentare qualsiasi carattere del codice ASCII

• Ad esempio: '\061' (618), '\x31' (31h) rappresentano entrambi il carattere stampabile '1'

• Le costanti carattere possono comparire nelle espressioni numeriche e vengono trattate come interi

– Esempio: l'espressione: '3' - '0' vale 3.

Infatti:

codice ASCII di 3 - codice ASCII di 0

0x33 - 0x30 = 0x03 = 310

Fondamenti di Informatica - Linguaggio C - Variabili e tipi di dato

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 15

Stringhe costanti

• Una stringa costante, o costante alfanumerica, è una sequenza di caratteri racchiusi fra doppi apici

• Esempi: "Questa è una stringa costante"

"" è la stringa vuota!

• Gli apici non fanno parte della stringa, ma servono a delimitarla

• Le stringhe costanti possono essere concatenate al momento della compilazione:

"Hello," " world!"

equivale a: "Hello, world!"

Fondamenti di Informatica - Linguaggio C - Variabili e tipi di dato

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 16

Stringhe costanti

• Nella rappresentazione interna, ogni stringa è terminata dal carattere nullo '\0' (che vale 0)

• La memoria fisica (in byte) richiesta per ogni stringa è pari al numero di caratteri fra gli apici più uno (il'\0')

• Esempio: la stringa costante "pippo" verrà collocata in 5+1=6 byte di memoria

• NOTA: 'x' e "x" non sono la stessa cosa. Infatti, 'x'è un intero (ASCII 0x78), mentre "x" è una stringa; in memoria essa è costituita dal carattere 'x'più il '\0'

Fondamenti di Informatica - Linguaggio C - Variabili e tipi di dato

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 17

Tipi di dato per enumerazione

• Un’enumerazione è una lista di valori interi costanti

• Le costanti vengono fissate mediante una dichiarazione di enumerazione,con la keyword enum:

enum giorno { Lunedi, Martedi, Mercoledi, Giovedi, Venerdi, Sabato, Domenica };

• Per default, in un’enumerazione il primo nome ha sempre valore 0, il secondo 1 e così via

• È anche possibile specificare dei valori espliciti, e tra loro non necessariamente distinti:

enum mesi { GEN = 1; JAN = 1; FEB = 2; MAR = 3; APR = 4; MAG = 5; MAY = 5; GIU = 6; JUN = 6; LUG = 7; JUL

= 7; AGO = 8; AUG = 8; SET = 9; SEP = 9; OTT = 10;

OCT = 10; NOV = 11; DIC = 12; DEC = 12 } ;

Fondamenti di Informatica - Linguaggio C - Variabili e tipi di dato

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 18

Dichiarazione delle variabili

• Per poterle utilizzare, tutte le variabili devono essere dichiarate

• Una dichiarazione specifica il tipo e una lista di nomi di una o più variabili di quel tipo:

int x, y, z;

unsigned char carattere_letto;

long double deficit_dello_stato;

• È anche possibile inizializzare una variabile ad un valore contestualmente alla sua dichiarazione:

int i = 0;

char carattere_letto = 'a';

(4)

Fondamenti di Informatica - Linguaggio C - Variabili e tipi di dato

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 19

Il qualificatore const

• Il qualificatore const si applica ad una variabile e specifica che il suo valore non verrà mai alterato

const double e;

e = 2.71828182845905;

oppure

const double e = 2.71828182845905;

• Una costante può essere definita anche mediante una macro di sostituzione, direttiva di preprocessor all'inizio del file sorgente:

#define PIGRECO 3.1415926535897932

Tutte le occorrenze di PIGRECO nel codice saranno automaticamente sostituite dalla costante floating-point 3.1415926535897932

Fondamenti di Informatica - Linguaggio C - Variabili e tipi di dato

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 20

Variabili locali

• Un programma C è costituito da un insieme di funzioni

• Una variabile definita internamente a una funzione è una variabile interna, o locale

#include <stdio.h>

#include <stdlib.h>

int main() {

int i = 4;

printf ("%d", i);

return EXIT_SUCCESS;

}

i è una variabile locale

Fondamenti di Informatica - Linguaggio C - Variabili e tipi di dato

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 21

Variabili globali

• È possibile definire anche delle variabili globali, o esterne alle funzioni

• Esse sono accessibili a un insieme di funzioni (oppure a tutte)

void f1(void) {

printf ("Introduci a e b: ");

scanf ("%d %d", &a, &b);

return;

} int f2(void) {

return (a + b);

}

#include <stdio.h>

int a, b;

void f1(void);

int f2(void);

int main() {

f1();

printf ("Somma a + b = %d", f2());

return;

}

Fondamenti di Informatica - Linguaggio C - Variabili e tipi di dato

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 22

Variabili globali e visibilità

• Le variabili globali sono un modo alternativo ai parametri per comunicare informazioni tra funzioni diverse

• Una variabile globale:

– va dichiarata all’inizio del file sorgente, subito dopo le direttive al preprocessor

– è allocata in modo permanente per tutta la durata del programma

– è visibile a tutte le funzioni dichiarate successivamente nello stesso file sorgente

Fondamenti di Informatica - Linguaggio C - Variabili e tipi di dato

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 23

Regole di visibilità (scope)

• Lo scope di un nome è la porzione di programma all’interno della quale tale nome può essere usato

• Per una variabile locale, dichiarata all’inizio di una funzione o come suo argomento, lo scope è la funzione stessa

• Variabili locali aventi lo stesso nome ma dichiarate in funzioni diverse sono variabili differenti!

• Per una variabile globale o una funzione, lo scope va dal punto in cui essa è dichiarata fino al termine del file in cui si trova

Fondamenti di Informatica - Linguaggio C - Variabili e tipi di dato

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 24

Dichiarazione o definizione?

• È importante distinguere tra la dichiarazione di una variabile esterna e la sua definizione

• Una dichiarazione rende note soltanto le proprietà di una variabile

• Una definizione provoca anche l’allocazione di un’area di memoria riservata a quella variabile

• La distinzione è fondamentale nel caso di variabili esterne e utilizzate in più file sorgenti → la memoria deve essere allocata una sola volta

• Gli stessi concetti verranno anche applicati alle funzioni

(5)

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 25

Variabili extern

• Fra tutti i file che costituiscono il file sorgente, uno solo deve contenere la definizione di una variabile esterna

• Tutti gli altri possono contenere solo dichiarazioni externdella stessa variabile

/* pippo.c */

#include <stdio.h>

int x;

int main() {

x = 5;

/* pluto.c */

#include <stdio.h>

extern int x;

int main() {

int y;

x = y + 4;

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 26

L’allocazione della memoria per la variabile x viene effettuata dalla compilazione di pippo.c /* pippo.c */

#include <stdio.h>

int x;

int main() {

x = 5;

/* pluto.c */

#include <stdio.h>

extern int x;

int main() {

int y;

x = y + 4;

In pluto.c, alla

variabile extern corrisponde un puntatore all’area di memoria di x

Riferimenti

Documenti correlati

© 2003 Pier Luca Montessoro (vedere nota di copyright a pag. 2) 2 Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright e dalle

© 2001 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 2 Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright e

© 2001 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 2 Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright e

© 2001 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 2 Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright e

© 2001 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 2 Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright e

© 2001 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 2 Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright e

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 2 Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 2 Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright