Linguaggio C - Puntatori

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Linguaggio C - Puntatori"

Transcript

1 Puntatori: I puntatori sono uno dei costrutti più potenti del linguaggio C; permettono ai programmi di realizzare il passaggio per riferimento, di passare funzioni alle funzioni, di accedere direttamente a locazioni di memoria e di gestire strutture dinamiche di dati. I puntatori sono delle variabili i cui valori sono degli indirizzi di memoria. Una variabile fa riferimento direttamene a un valore; mentre un puntatore fa indirettamente riferimento a un valore. Es.: int x=6; x memoria:... 6 indirizzi: L operatore & ( visto nella scanf ) restituisce l indirizzo di memoria di una variabile; che può essere assegnato solo a una speciale categoria di variabili: i puntatori. Sintassi per dichiarare un puntatore: tipo* nome_puntatore; o in modo equivalente: tipo *nome_puntatore; La dichiarazione di un puntatore include il tipo dell'oggetto a cui il puntatore punta; ovvero un puntatore è in grado di memorizzare indirizzi di memoria di variabili di tipo: tipo. Ad esempio non è possibile che un puntatore a int punti a un float e così via.

2 Esempi: int *pointer; // pointer è un puntatore a intero char *ptr; double *x_ptr; Nota : con la semplice dichiarazione, un puntatore a cosa punta? Inizializzazione: int a=10; int *ptr; ptr = &a; // ptr punta ad a ptr a memoria:... indirizzi: L'operatore di indirezione * : si applica a una variabile di tipo puntatore e restituisce il contenuto della variabile puntata. Es.: int x = 10; int* ptr = &x; printf("valore di x = %d", x); *ptr += 20; printf("valore di x= %d", x); // x e *ptr sono degli alias. Quanto vale x?

3 ancora: char a = 'a', b = 'b' ; char* ptr = &a; printf("valore di a = %c e di b = %c", a, b); b=*ptr; printf( Valore di a = %c e di b = %c", a, b); errore tipico: int *ptr; *ptr = 100; // ptr non punta ad alcuna locazione di memoria. In relazione alla inizializzazione dei puntatori abbiamo 3 possibilità: assegnare l indirizzo di una variabile dichiarata. assegnare un altro puntatore esistente (stesso tipo). assegnare valore NULL.

4 Array e Puntatori: In C gli array e i puntatori sono strettamente correlati. Si noti che il nome di un array è una costante è funge da puntatore al suo primo elemento. Ad esempio: char stringa[10]; char *s; scrivere: s = stringa oppure s = &stringa[0] è equivalente Nota: gli elementi di un array possono essere scanditi per mezzo dell indice associato; una cosa equivalente si può ottenere tramite puntatore. Cosicchè: s[0] : indica il valore della prima componente dell array (s + i) : punta alla (i+1)-esima componente del vettore (equivale a &stringa[i]). Es.: s=stringa; stringa[3] = 'c'; printf("stringa[3]= %c\n", stringa[3]); // stampa: c *(s+3) = 'C'; printf("stringa[3]= %c\n", stringa[3]); // stampa: C Nota: essendo il nome dell array una costante non possiamo scrivere: stringa++; // errore! stringa = stringa+2; // errore!

5 Esempio: int buffer[5]; int s*; s = buffer; equivale a: for(i=0; i<5; i++) buffer[i] = i; for(i=0; i<5; i++) { *s = i; s = s+1; for(i=0; i<5; i++) { *s++ = i; for(i=0; i<5; i++) { s[i] = i; Nota: fare attenzione che (s+i) non vada fuori range. Es.: con s = buffer; s -= 2; oppure s = s+6; // errore! Aritmetica dei Puntatori: Siccome un puntatore contiene indirizzi di memoria, le operazioni consentite sono soltanto quelle che hanno senso per un indirizzo; gli operatori sono: // incremento e decremento Nota: l incremento o il decremento di un puntatore dipende dal tipo di dato puntato; poiché ogni tipo di dato occupa un numero diverso di byte in memoria.

6 Ad es. supponiamo che ogni locazione di memoria sia di 1 byte; char occupa 1 byte e int 4 byte: char c; char* s=&c; con s++ // sposta s in avanti di un byte int i=1; int* p = &i; con p++ // s avanza di 4 byte Si noti la differenza: (*s)++ : incrementa di uno il valore della variabile puntata da s. (s++) : incrementa l indirizzo contenuto in s. E possibile effettuare anche sottrazioni tra puntatori che puntano elementi dello stesso array: es.: int v1[5]; int v2[5]; int i; int *ptr; for(i=0; (v1[i] = (i+1)) <= 5; i++); i = &v1[4]-&v1[2]; printf("%d\n", i); // scrive 2 ovvero: (v1 + 4) (v1 + 2) i = &v2[4] - &v1[2]; printf("%d\n", i); // v1 è diverso da v2, risultato imprevedibile! ptr = v2-3; // non corretto, probabilmente punta a elem. di v1.

7 Puntatori e funzioni (passaggio parametri per indirizzo): Il linguaggio C di default implementa il passaggio di parametri per valore. Si ricordi le difficoltà incontrate con la funzione scambio per scambiare il valore di due variabili passate come parametri. In realtà lo scambio avveniva solo tra parametri formali e no attuali. Si può ovviare a questo problema, passando alla funzione gli indirizzi dei parametri attuali. Passare un indirizzo ad una funzione, significa renderle nota la locazione di memoria che contiene l oggetto; cosicchè le modifiche si effettueranno direttamente nei parametri attuali. Es. (funzione scambio): /* Funzione scambio non funzionante */ #include <stdio.h> void scambio(int, int); int main() { int a=5, b=7; printf("prima dello scambio: a= %d e b= %d\n", a, b); scambio(a,b); printf("dopo lo scambio: a= %d e b= %d\n", a, b); return 0; void scambio(int x, int y) { int tmp = x; x = y; y = tmp;

8 Con i Puntatori: /* Funzione scambio OK */ #include <stdio.h> void scambio(int*, int*); int main() { int a=5, b=7; printf("prima dello scambio: a= %d e b= %d\n", a, b); scambio(&a, &b); printf("dopo lo scambio: a= %d e b= %d\n", a, b); return 0; void scambio(int *x, int *y) { int tmp; tmp = *x; *x = *y; *y = tmp; Altra versione, con solo puntatori - da rivedere più avanti: /* Funzione scambio - solo puntatori */ #include <stdio.h> #include <stdlib.h> void scambio(int**, int**); int main() { // int a=5, b=7; int *a = (int*) malloc(sizeof(int)); *a = 5; int *b = (int*) malloc(sizeof(int)); *b = 7; printf("prima dello scambio: *a= %d e *b= %d\n", *a, *b); scambio(&a,&b); printf("dopo lo scambio: *a= %d e *b= %d\n", *a, *b); return 0; void scambio(int **x, int **y) { int *tmp; tmp = *x; *x = *y; *y = tmp; La stessa tecnica (passaggio indirizzo) si può usare con gli array come parametri. Le stringhe in C sono array di caratteri che terminano con \0; pertanto possono essere manipolate con puntatori.

9 Es.: #include<stdio.h> int my_strlen(char* s); int main() { char str[] = "Una stringa di prova"; printf("la lunghezza di: %s e' %d\n ", str, my_strlen(str)); return 0; int my_strlen(char * s){ int i=0; while(*s++) i++; // oppure while(s[i++]); return i-1; return i; Si noti che: int my_strlen(char *s); è equivalente a: int my_strlen(char s[]); La funzione my_strlen si può scrivere anche: int my_strlen(char * s){ char *p=s; while(*p++); return (p-s-1);

10 Le funzioni (predefinite) per la manipolazione delle stringhe (incluse in string.h), operano sempre attraverso i puntatori a carattere. Si noti il prototipo di alcune funzioni: char* strcat(char *string1, const char *string2); // concatena string1 e string2 -> string1 int strlen(const char *string); // restituisce la lunghezza di string escluso il terminatore. Altro esempio: sostituzione di stringhe: #include <stdio.h> void funzione(char *, char *); int main() { char a[] = "stringa da sostituire"; char b[] = "stringa di prova"; printf("'%s'\n'%s'\n\n", a, b); funzione(a, b); printf("'%s'\n'%s'\n\n",a, b); return 0; void funzione(char *p, char *q) { while((*p=*q)!= '\0') { p++; q++; // in forma più compatta: while((*p++=*q++)!= '\0');

11 Esempio con array di altro tipo: #include <stdio.h> #define NUM 10 void carica(int *, int); int main() { int i, c[num]; carica(c, NUM); // perchè passiamo c e non &c? // stampa vettore: for(i=0; i<num; i++) printf("elemento %d = %d\n", i+1, c[i]); return 0; void carica(int* pt, int n) { int i; for(i=0; i< n; i++) { printf("inserisci elemento: "); scanf("%d", &pt[i]); // in alternativa: scanf("%d", (pt + i)); Una funzione può ritornare un puntatore. Questo permette di restituire una struttura dati più complessa rispetto ai tipi di dato semplici come int, char, ecc.

12 Esempio: #include <stdio.h> char* trova(char *str, char c); int main() { char car = 'd'; // carattere da cercare char str[] = "stringa di testo"; if(trova(str, car)) printf("%s", trova(str, car)); else printf("carattere non trovato"); return 0; char* trova(char *str, char c) { while(*str++) if(*str == c) return str; return NULL; Info: esistono anche i puntatori a funzioni; contengono l indirizzo della funzione. Analogamente al nome dell array che punta al primo elemento, il nome della funzione è in realtà l indirizzo di memoria iniziale del codice (blocco di istruzioni) che esegue il compito della funzione. Es.: int (*nomefunc)(parametri) da non confondere con int *nomefunc(parametri) Per approfondimenti ed esempi si rimanda alla documentazione ufficiale.

13 Esercizi: (implementare le seguenti funzioni) char* fromfirstupper(char *); /* ritorna la stringa dal primo carattere maiuscolo, null se non c'è */ char* fromfirstdigit(char *); /* ritorna la stringa dal primo numero, null se non c'è */ char* parsedigits(char *); /* ritorna la stringa di soli numeri, null se non ci sono */ char* parsechars(char* s1, char* s2); /* ritorna una stringa a partire da s1 senza i caratteri compresi in s2 */ char* mysubstring(char* s1, char* s2); /* ritorna la parte di stringa in s1 che fa "match" con s2, null se non c'è */ int* greatesvalues(int* vet, int limit); /* ritorna i valori di vet i cui elementi sono > limit, null se non ci sono */ int firstoccurrenceof(char* s1, char c); /* ritorna la posizione della prima occorrenza di c in s1, -1 se non c'è */

14 Allocazione dinamica della memoria: Grazie all utilizzo dei puntatori, il linguaggio C permette la creazione e la gestione di oggetti dinamici. Mentre gli oggetti statici vengono creati nella fase di definizione, quelli dinamici sono creati durante l esecuzione del programma; ovvero vengono creati o distrutti in fase di esecuzione del programma e non durante la compilazione. La memoria (in C) è divisa in due parti: - Stack: contiene tutto ciò che è statico ( es. int, float, ecc ). - Heap: riservata per gli oggetti dinamici. Funzioni utilizzate per la gestione dinamica della memoria: malloc() : allocazione della memoria free() : rilascio della memoria realloc() : modifica dello spazio allocato Nota: per usare le suddette funzioni, includere il file malloc.h e/o stdlib.h. Particolarmente utile risulta essere l operatore sizeof : restituisce la dimensione del tipo di dato da allocare. void* malloc(size_t size); // prototipo Sintassi: tipodato* ptr = (tipodato *) malloc(sizeof(tipodato)); tipodato: indica il tipo di dato per cui allochiamo memoria ptr: (puntatore) è una variabile di tipo: tipodato * sizeof: restituisce il numero di byte che occupa: tipodato

15 Nota: generalmente si usa il casting (tipodato *), poichè la funzione malloc() restituisce un puntatore generico (void *) che può puntare qualsiasi tipo di dato; con il cast viene assegnato il tipo richiesto. Se la richiesta di allocazione va a buon fine, ptr punta all inizio dello spazio allocato in memoria; altrimenti punta a NULL ( es. memoria esaurita ). Es.: int* ptr = (int *) malloc(sizeof(int)); Abbiamo allocato uno spazio di memoria sufficiente a contenere un intero; esso è raggiungibile soltanto attraverso il puntatore ptr. #include <stdio.h> #include <malloc.h> int main() { int *ptr; ptr = (int *) malloc(sizeof(int)); if(ptr == NULL) { printf("errore in fase di allocazione! \n"); return(-1); // oppure exit(-1); *ptr = 12; (*ptr)++; printf("*ptr vale %d\n", *ptr); // cosa stampa? return 0;

16 Nota: per determinare la dimensione di un tipo di dato non affidarsi a valori di default, ma usare sempre sizeof. Es.: int* ptr = (int *) malloc(4); // non è detto che sia corretto; poiché sizeof(int) potrebbe non essere 4 byte. Esempio: allochiamo più di un elemento; int i, *p; /* allochiamo 10 elementi. */ p = (int *) malloc(10*sizeof(int)); if(p == NULL) exit(-1); // errore in allocazione! for(i = 0; i < 10; i++) *(p + i) = i; // possiamo scorrere le 10 posizioni. for(i = 0; i < 10; i++) printf("*(p + %d) vale %d\n", i, *(p + i)); // cosa stampa?

17 Interessante esempio su stringhe dinamiche: #include <stdio.h> #include <stdlib.h> //#include<malloc.h> #include <string.h> char* my_concat(const char *, const char *); int main (void) { char *p; p = my_concat("abcd","efghi"); printf ("Risultato : %s \n", p); // stampa? return 0; char* my_concat(const char *s1, const char *s2) { char * result; result = (char *) malloc((strlen(s1) + strlen(s2) + 1) * sizeof(char)); if(result == NULL) { printf("out of memory\n"); exit (-1); strcpy(result, s1); strcat(result, s2); return result;

18 Nota: La keyword const non permette modifiche sui parametri attuali. Nota bene: gli oggetti allocati dinamicamente, vengono indirizzati tramite puntatore. Attenzione a non perdere il riferimento, altrimenti gli oggetti non sono più reperibili: int* p = (int *) malloc(sizeof(int)); *p= 20; int i=0; se scriviamo: p = &i; -> ora *p vale 0, perdendo la vecchia locazione. Deallocazione: free(): rilascia o dealloca la memoria precedentemente allocata da una malloc(). Ha effetto solo nei puntatori creati con allocazione dinamica. void free(void* ptr); // prototipo es.: int* ptr = (int *) malloc(sizeof(int)); *ptr= 10; //.. free(ptr); ptr = NULL; // abbiamo rilasciato lo spazio, ma ptr non si sa a cosa punti, allora: Nota: la funzione free non si applica agli array.

19 realloc() Questa funzione permette di modificare (in fase di esecuzione) lo spazio di memoria occupato da un oggetto dinamico già esistente. Consente ad esempio, di definire gli array flessibili. Definito un array, se lo spazio non è sufficiente a contenere i dati, la realloc consente di aggiungere altri blocchi. Il prototipo: void* realloc( void* ptr, size_t size ); Si veda esempio: #include <stdio.h> #include <stdlib.h> int main() { int input, n, count=0; int *numbers = NULL; do { printf("inserire un numero intero (0 - uscita): "); scanf("%d", &input); count++; numbers = (int*) realloc(numbers, count * sizeof(int)); if(numbers==null) { printf("error (re)allocating memory"); exit (1); numbers[count-1]=input; while(input!=0); printf("numeri inseriti: "); for(n=0; n<count; n++) printf("%d ",numbers[n]); free(numbers); return 0;

20 Array di Puntatori: In questo caso, gli elementi dell array sono di tipo puntatore. es.: int* vett[10]; int i=1; vett[5]= &i; // la componente vett[i] è un puntatore *vett[5] = 2; // anche la variabile i varrà 2. char* colori[4] = {"Giallo", "Blu", "Rosso", "Verde"; // Array bidimensionale (4 puntatori a carattere) *colori[2] = "Arancio"; float* a[10]; float x=10.5f; a[6] = &x; *a[6] = 0; // quanto vale x?

21 Puntatori a Puntatori (indirizzamento multiplo): Un puntatore è una variabile che contiene l indirizzo di memoria di un altra variabile; perciò è possibile far uso di puntatori che puntano ad altri puntatori. Sintassi: tipo **variabile; es.: int a, *p, **pp; p = &a; pp=&p; **pp = 10; // avremo che a = 10; e *pp: non è un valore ma un indirizzo PP P A 10 // vedere la stampa: printf("indirizzo di pp= %p, valore= %p\n", &pp, pp); printf("indirizzo di p= %p, valore= %p\n", &p, p); printf("indirizzo di a= %p, valore= %d \n", &a, a);

22 L indirizzamento multiplo, permette di creare dinamicamente array bidimensionali: Ad esempio, creiamo un array 3*4: int **a, i; a = (int **) malloc(3 * sizeof(int *)); for(i=0; i<3; i++) a[i] = (int *) malloc(4 * sizeof(int));. a[1][2]= 10; Esercizi: - Implementare la funzione per allocazione dinamica di matrici (tutte le caselle inizializzate a 0); prototipo: float **matrice(int nr, int nc); - Scrivere una funzione che restituisca il valore max di una matrice passata come parametro: prototipo: int trova( int **matr, int nr, int nc);

23 Linguaggio C Funzione main() Completamento funzione main() La funzione main(), viene eseguita all inizio del programma. Finora l abbiamo vista ed utilizzata nella sua forma più semplice; non abbiamo passato parametri e non abbiamo tenuto conto del valore di ritorno. Lo standard definisce tre dichiarazioni (prototipi) per la funzione main: int main(void) int main(int argc, char *argv[]) int main(int argc, char *argv[], char *envp[]) int argc: indica il numero di parametri passati al programma in fase di avvio, compreso il nome del programma. char *argv[]: contiene tutti gli argomenti sotto forma di stringhe (il nome del programma corrisponde ad argv[0]). char *envp[]: contiene le variabili di ambiente del sistema operativo. La funzione main, ritorna un valore int, che indica l esito dell esecuzione: 0: esecuzione completata correttamente. -1: si sono verificati problemi. Nota: Per passare i parametri ad un programma basta, alla riga di comando, specificarli di seguito al nome del programma (separati da uno spazio).

24 #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int i; printf("nome del programma: '%s'\n",argv[0]); // argv[0] esiste sempre. printf("al programma sono stati passati %d parametri.\n", argc-1); if(argc > 1) for(i = 1; i < argc; i++) printf("parametro argv[%d] = %s\n", i, argv[i]); else printf("nessun parametro passato.\n"); return 0; Esecuzione: c:\> nomefile parametro1 parametro2. Nota: I nomi argc, argv sono convenzionali, si possono cambiare. Si noti l equivalenza: int main(int argc, char *argv[]); int main(int argc, char **argv); Utilizzo: se abbiamo un programma che fa operazioni di I/O su file, il nome di quest ultimo lo possiamo specificare come parametro al momento del lancio.

Unità Didattica 4 Linguaggio C. Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo.

Unità Didattica 4 Linguaggio C. Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo. Unità Didattica 4 Linguaggio C Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo. 1 Vettori Struttura astratta: Insieme di elementi dello stesso tipo, ciascuno individuato da un indice;

Dettagli

Allocazione dinamica della memoria

Allocazione dinamica della memoria Allocazione dinamica della memoria Allocazione statica: limiti Per quanto sappiamo finora, in C le variabili sono sempre dichiarate staticamente la loro esistenza deve essere prevista e dichiarata a priori

Dettagli

Ogni variabile in C è una astrazione di una cella di memoria a cui corrisponde un nome, un contenuto e un indirizzo.

Ogni variabile in C è una astrazione di una cella di memoria a cui corrisponde un nome, un contenuto e un indirizzo. Ogni variabile in C è una astrazione di una cella di memoria a cui corrisponde un nome, un contenuto e un indirizzo. int a = 5; a 5 α=&a Esistono in C particolari variabili dette puntatori che possono

Dettagli

Il linguaggio C. Puntatori e dintorni

Il linguaggio C. Puntatori e dintorni Il linguaggio C Puntatori e dintorni 1 Puntatori : idea di base In C è possibile conoscere e denotare l indirizzo della cella di memoria in cui è memorizzata una variabile (il puntatore) es : int a = 50;

Dettagli

Uso avanzato dei puntatori Allocazione dinamica della memoria

Uso avanzato dei puntatori Allocazione dinamica della memoria Uso avanzato dei puntatori Allocazione dinamica della memoria Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica

Dettagli

L Allocazione Dinamica della Memoria

L Allocazione Dinamica della Memoria L Allocazione Dinamica della Memoria Maurizio Palesi DIIT Università di Catania Viale Andrea Doria 6, 95125 Catania mpalesi@diit.unict.it http://www.diit.unict.it/users/mpalesi Sommario Questo documento

Dettagli

Gestione dinamica della memoria

Gestione dinamica della memoria Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 2016-2017 Gestione dinamica della memoria Pietro Di Lena - pietro.dilena@unibo.it A pessimistic programmer sees the array as half empty.

Dettagli

Puntatori. Unità 6. Corso di Laboratorio di Informatica Ingegneria Clinica BCLR. Domenico Daniele Bloisi

Puntatori. Unità 6. Corso di Laboratorio di Informatica Ingegneria Clinica BCLR. Domenico Daniele Bloisi Corso di Ingegneria Clinica BCLR Domenico Daniele Bloisi Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore Dipartimento di Ingegneria Informatica, Automatica e Gestionale Antonio Ruberti Via Ariosto

Dettagli

Puntatori. Unità 6. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Puntatori. Unità 6. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Domenico Daniele Bloisi Docenti Parte I prof. Silvio Salza salza@dis.uniroma1.it http://www.dis.uniroma1.it/~salza/fondamenti.htm

Dettagli

La gestione della memoria dinamica Heap

La gestione della memoria dinamica Heap Laboratorio di Algoritmi e Strutture Dati La gestione della memoria dinamica Heap Prof. Luigi Lamberti 2005 Cenni sui Processi Un Programma è un insieme di Istruzioni memorizzato in un file con le costanti

Dettagli

Puntatori. Un puntatore contiene un numero che indica la locazione di memoria dove è presente la variabile puntata

Puntatori. Un puntatore contiene un numero che indica la locazione di memoria dove è presente la variabile puntata Puntatori int i = 10; int * pi = &i; pi i = 10 116 int * pi = pi contiene un informazione che mi permette di accedere ( puntare ) ad una variabile intera Un puntatore contiene un numero che indica la locazione

Dettagli

Strutture Dati Dinamiche

Strutture Dati Dinamiche Strutture Dati Dinamiche Motivazioni Le variabili considerate fino a questo punto devono essere dichiarate staticamente, ossia la loro esistenza, il loro nome e la loro dimensione devono essere previsti

Dettagli

Puntatori in C. Puntatori. Variabili tradizionali Esempio: int a = 5; Proprietà della variabile a: nome: a

Puntatori in C. Puntatori. Variabili tradizionali Esempio: int a = 5; Proprietà della variabile a: nome: a Puntatori in C Puntatori Variabili tradizionali indirizzo int a = 5; A00E... Proprietà della variabile a: nome: a A010 A012 5 tipo: int A014 valore: 5 indirizzo: A010 Finora abbiamo usato solo le prime

Dettagli

Puntatori (in C) Emilio Di Giacomo

Puntatori (in C) Emilio Di Giacomo Puntatori (in C) Emilio Di Giacomo Puntatori In questa lezione parleremo di uno dei costrutti più potenti del C: i puntatori I puntatori vengono utilizzati per realizzare il passaggio di parametri per

Dettagli

Il linguaggio C Puntatori

Il linguaggio C Puntatori Il linguaggio C Puntatori Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna http://www.moreno.marzolla.name/ Linguaggio C - puntatori 2 Ringraziamenti Questi

Dettagli

Laboratorio di Informatica Ingegneria Clinica Lezione 14-16/11/2011

Laboratorio di Informatica Ingegneria Clinica Lezione 14-16/11/2011 Laboratorio di Informatica Ingegneria Clinica Lezione 14-16/11/2011 Raffaele Nicolussi FUB - Fondazione Ugo Bordoni Via del Policlinico, 147 00161 Roma I puntatori Variabili e parametri Parametri formali

Dettagli

Allocazione Dinamica. Allocazione Statica. malloc() La funzione malloc()

Allocazione Dinamica. Allocazione Statica. malloc() La funzione malloc() Allocazione Statica Finora abbiamo visto che le variabili sono sempre definite staticamente. Questo è un limite perché la loro esistenza deve essere prevista e dichiarata a priori. In particolare per variabili

Dettagli

Introduzione al C. Unità Gestione Dinamica della Memoria

Introduzione al C. Unità Gestione Dinamica della Memoria Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Introduzione al C Unità Gestione Dinamica della Memoria D. Bloisi, A. Pennisi, S. Peluso, S. Salza Gestione

Dettagli

Fondamenti di Informatica T. Linguaggio C: i puntatori

Fondamenti di Informatica T. Linguaggio C: i puntatori Linguaggio C: i puntatori Il puntatore E` un tipo di dato, che consente di rappresentare gli indirizzi delle variabili allocate in memoria. Dominio: Il dominio di una variabile di tipo puntatore è un insieme

Dettagli

Corso di Fondamenti di Informatica. Puntatori e Allocazione Dinamica

Corso di Fondamenti di Informatica. Puntatori e Allocazione Dinamica Corso di Fondamenti di Informatica Puntatori e Allocazione Dinamica I puntatori (Richiamo) Il C++ prevede puntatori a dati di qualsiasi natura, semplici o strutturati e puntatori a funzione. In particolare

Dettagli

Le strutture. Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune.

Le strutture. Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune. Le strutture Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune. Dichiarazione di una struttura: struct point { int x; int y; }; La dichiarazione di una struttura

Dettagli

Laboratorio di Programmazione: Linguaggio C Lezione 21 del 19 maggio 2014

Laboratorio di Programmazione: Linguaggio C Lezione 21 del 19 maggio 2014 Laboratorio di Programmazione: Linguaggio C Lezione 21 del 19 maggio 2014 Damiano Macedonio Esercizio 1 Scrivere una funzione che riceve in ingresso un puntatore ad un array di interi e modifica tale array

Dettagli

Linguaggio C - Array. Array: tipo nome_array[num_elementi]

Linguaggio C - Array. Array: tipo nome_array[num_elementi] Linguaggio C - Array Array: Gli array o vettori sono delle strutture dati in grado di contenere un insieme di valori tutti dello stesso tipo. Un array lo possiamo immaginare come un contenitore suddiviso

Dettagli

Introduzione ai puntatori in C Definizione

Introduzione ai puntatori in C Definizione Introduzione ai puntatori in C Definizione Un puntatore è una variabile che contiene l indirizzo di un altra variabile Tramite i puntatori si può quindi accedere a un oggetto indirettamente (si usa il

Dettagli

! Per quanto sappiamo finora, in C le variabili sono sempre definite staticamente

! Per quanto sappiamo finora, in C le variabili sono sempre definite staticamente ! Per quanto sappiamo finora, in C le variabili sono sempre definite staticamente!!la loro esistenza deve essere prevista e dichiarata a priori! Questo può rappresentare un problema soprattutto per variabili

Dettagli

Verso i puntatori: Cosa è una variabile?

Verso i puntatori: Cosa è una variabile? Verso i puntatori: Cosa è una variabile? Quando si dichiara una variabile, ad es. int a; si rende noto il nome e il tipo della variabile. Il compilatore alloca l opportuno numero di byte di memoria per

Dettagli

Introduzione al linguaggio C Puntatori

Introduzione al linguaggio C Puntatori Introduzione al linguaggio C Puntatori Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica 19 ottobre 2016

Dettagli

Puntatori. Fondamenti di Programmazione

Puntatori. Fondamenti di Programmazione Puntatori Fondamenti di Programmazione Funzioni utili stdio.h c = getchar(); restituisce un carattere letto da tastiera. Equivale a: scanf( %c, &c); putchar(c); scrive un carattere sullo schermo. Equivale

Dettagli

Array. Parte 7. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Array. Parte 7. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Domenico Daniele Bloisi Docenti Parte I prof. Silvio Salza salza@dis.uniroma1.it http://www.dis.uniroma1.it/~salza/fondamenti.htm

Dettagli

Struct, enum, Puntatori e Array dinamici

Struct, enum, Puntatori e Array dinamici Struct, enum, Puntatori e Array dinamici Tratti dal corso del Dr. Francesco Fabozzi Corso di Informatica Tipi di dato in C Abbiamo esaminato diversi tipi di dato che il C mette a disposizione dell utente

Dettagli

Il linguaggio C. Puntatori e dintorni

Il linguaggio C. Puntatori e dintorni Il linguaggio C Puntatori e dintorni 1 Puntatori : idea di base In C è possibile conoscere e denotare l indirizzo della cella di memoria in cui è memorizzata una variabile (il puntatore) es : int a = 50;

Dettagli

Array. Maurizio Palesi Salvatore Serrano. In C si possono definire tipi strutturati Vi sono due costruttori fondamentali

Array. Maurizio Palesi Salvatore Serrano. In C si possono definire tipi strutturati Vi sono due costruttori fondamentali MASTER Information Technology Excellence Road (I.T.E.R.) Array Maurizio Palesi Salvatore Serrano Master ITER Informatica di Base Maurizio Palesi, Salvatore Serrano 1 Tipi di dato stutturati In C si possono

Dettagli

Linguaggio C: PUNTATORI

Linguaggio C: PUNTATORI Linguaggio C: PUNTATORI I puntatori sono una delle più importanti caratteristiche del linguaggio C. Permettono di lavorare a basso livello, mantenendo flessibilità e praticità. Il C utilizza molto i puntatori

Dettagli

Stringhe e allocazione dinamica della memoria

Stringhe e allocazione dinamica della memoria Stringhe e allocazione dinamica della memoria Esercizio Scrivere un programma strings.c che legge da standard input una sequenza di parole separate da uno o più spazi, e stampa le parole lette, una per

Dettagli

Esercizi Array Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Esercizi Array Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Domenico Daniele Bloisi Docenti Parte I prof. Silvio Salza salza@dis.uniroma1.it http://www.dis.uniroma1.it/~salza/fondamenti.htm

Dettagli

Puntatori. Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori

Puntatori. Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori Puntatori Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori 1 Il puntatore Un tipo puntatore è un tipo scalare per

Dettagli

POINTERS. Una variabile pointer è una variabile che ha come valore un indirizzo di memoria.

POINTERS. Una variabile pointer è una variabile che ha come valore un indirizzo di memoria. POINTERS Una variabile pointer è una variabile che ha come valore un indirizzo di memoria. Es. Sia y una variabile intera di valore e sia yptr una variabile pointer avente come valore l indirizzo di y.

Dettagli

I puntatori. Un puntatore è una variabile che contiene l indirizzo di un altra variabile. puntatore

I puntatori. Un puntatore è una variabile che contiene l indirizzo di un altra variabile. puntatore I puntatori Un puntatore è una variabile che contiene l indirizzo di un altra variabile. puntatore...... L operatore & fornisce l indirizzo di un oggetto: p = &c; assegna a p l indirizzo di c, i.e., p

Dettagli

Allocazione dinamica della memoria

Allocazione dinamica della memoria Andrea Marin Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time a.a. 2011/2012 Tipi di memoria dati Nella macchina astratta C esistono tre tipi di memoria per allocare

Dettagli

Implementazione di Liste puntate

Implementazione di Liste puntate Laboratorio di Algoritmi e Strutture Dati Aniello Murano http://people.na.infn.it people.na.infn.it/~murano/ 1 Implementazione di Liste puntate 2 1 Indice Liste puntate semplici: Gli elementi sono logicamente

Dettagli

Una stringa di caratteri in C è un array di caratteri terminato dal carattere '\0' a p e \0

Una stringa di caratteri in C è un array di caratteri terminato dal carattere '\0' a p e \0 STRINGHE: ARRAY DI CARATTERI Una stringa di caratteri in C è un array di caratteri terminato dal carattere '\0' s a p e \0 0 1 2 3 Un vettore di N caratteri può dunque ospitare stringhe lunghe al più N-1

Dettagli

L'allocazione dinamica della memoria

L'allocazione dinamica della memoria L'allocazione dinamica della memoria Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino I puntatori Le variabili di tipo puntatore permettono di accedere alla memoria

Dettagli

Esercizi Array. Parte 7. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Esercizi Array. Parte 7. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Domenico Daniele Bloisi Docenti Parte I prof. Silvio Salza salza@dis.uniroma1.it http://www.dis.uniroma1.it/~salza/fondamenti.htm

Dettagli

Definizione Allocazione e deallocazione di variabili Allocazione e deallocazione di vettori

Definizione Allocazione e deallocazione di variabili Allocazione e deallocazione di vettori Università degli Studi di Cagliari Corso di Laurea in Ingegneria Biomedica (Industriale), Chimica, Meccanica, Elettrica FONDAMENTI DI INFORMATICA 1 http://www.diee.unica.it/~marcialis/fi1 A.A. 2010/2011

Dettagli

Esercizio 1: funzione con valore di ritorno di tipo puntatore

Esercizio 1: funzione con valore di ritorno di tipo puntatore Esercitazione Fondamenti di Informatica B Corso di Laurea in Ingegneria Meccanica 7 Esercitazione: 14 dicembre 2005 Esercizi su ricorsione, manipolazione stringhe, strutture dinamiche Problema: Esercizio

Dettagli

Allocazione statica della memoria

Allocazione statica della memoria 2015 - Roberta Gerboni 1 2 Allocazione statica della memoria Cosa succede nella memoria del computer quando il un programma vengono dichiarate delle variabili? memoria Ad esempio: int main() 57 { int x=

Dettagli

Il puntatore. Il puntatore

Il puntatore. Il puntatore Il puntatore È un tipo scalare, che consente di rappresentare gli indirizzi delle variabili allocate in memoria. Il dominio di una variabile di tipo puntatore è un insieme di indirizzi: Il valore di una

Dettagli

Tipi di dato personalizzati Array di struct. Tipi di dato utente. Laboratorio di Programmazione I. Corso di Laurea in Informatica A.A.

Tipi di dato personalizzati Array di struct. Tipi di dato utente. Laboratorio di Programmazione I. Corso di Laurea in Informatica A.A. Array di Tipi di dato utente Laboratorio di Programmazione I Corso di Laurea in Informatica A.A. 2016/2017 Array di Calendario delle lezioni Lez. 1 Lez. 2 Lez. 3 Lez. 4 Lez. 5 Lez. 6 Lez. 7 Lez. 8 - Introduzione

Dettagli

Linguaggio C: puntatori

Linguaggio C: puntatori Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica A - GES Prof. Plebani A.A. 2006/2007 Linguaggio C: puntatori La presente dispensa e da utilizzarsi ai soli fini didattici previa

Dettagli

Prof.Ing.S.Cavalieri Puntatori e Heap in Linguaggio C. Puntatori e Heap

Prof.Ing.S.Cavalieri Puntatori e Heap in Linguaggio C. Puntatori e Heap Puntatori e Heap 1.Cosa Sono i Puntatori? I puntatori sono fondamentalmente delle variabili, come quelle intere, reali e carattere. Tuttavia, l unica differenza consiste nel fatto che essi non contengono

Dettagli

Il linguaggio C. Puntatori e Array

Il linguaggio C. Puntatori e Array Il linguaggio C Puntatori e Array Puntatori I puntatori sono variabili i cui valori sono indirizzi di locazioni in cui sono memorizzate altre variabili architettura a 32 bit: 232-1 indirizzi, ma non si

Dettagli

Operazioni sulle stringhe Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Operazioni sulle stringhe Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Domenico Daniele Bloisi Docenti Parte I prof. Silvio Salza salza@dis.uniroma1.it http://www.dis.uniroma1.it/~salza/fondamenti.htm

Dettagli

Lezione 8 Struct e qsort

Lezione 8 Struct e qsort Lezione 8 Struct e qsort Rossano Venturini rossano@di.unipi.it Pagina web del corso http://didawiki.cli.di.unipi.it/doku.php/informatica/all-b/start Esercizio 3 QuickSort strambo Modificare il Quicksort

Dettagli

Puntatori in C Lucidi della Pof.ssa Pazienza

Puntatori in C Lucidi della Pof.ssa Pazienza Puntatori in C Lucidi della Pof.ssa Pazienza http://www.uniroma2.it/didattica/foi2/ Puntatori L operatore di indirizzo & Indirizzi, puntatori Aritmetica dei puntatori L operatore di dereferenziazione *

Dettagli

Informatica 1. Corso di Laurea Triennale in Matematica. Gianluca Rossi

Informatica 1. Corso di Laurea Triennale in Matematica. Gianluca Rossi Informatica 1 Corso di Laurea Triennale in Matematica Gianluca Rossi gianluca.rossi@uniroma2.it Dipartimento di Matematica Università di Roma Tor Vergata 11: Stringhe (www.informatica-uno.blogspot.com)

Dettagli

Introduzione al C. Ancora puntatori, allocazione dinamica, e tipi derivati

Introduzione al C. Ancora puntatori, allocazione dinamica, e tipi derivati Introduzione al C Ancora puntatori, allocazione dinamica, e tipi derivati 1 Array di caratteri Non esiste in C un tipo di dato predefinito per le stringhe Le stringhe sono rappresentate come array di caratteri.

Dettagli

I puntatori e l allocazione dinamica di memoria

I puntatori e l allocazione dinamica di memoria I puntatori e l allocazione dinamica di memoria Allocazione dinamica di memoria L allocazione delle variabili Allocazione e rilascio espliciti di memoria Le funzioni malloc e free 2 Allocazione dinamica

Dettagli

Input/output da file I/O ANSI e I/O UNIX FLUSSI E FILE FLUSSI FLUSSI di TESTO FLUSSI BINARI FILE

Input/output da file I/O ANSI e I/O UNIX FLUSSI E FILE FLUSSI FLUSSI di TESTO FLUSSI BINARI FILE Input/output da file Il linguaggio C non contiene istruzioni di I/O, in quanto tali operazioni vengono eseguite tramite funzioni di libreria standard. Questo approccio rende estremamente flessibile e potente

Dettagli

Non ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di

Non ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di ARRAY DI PUNTATORI Non ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di puntatori Ad esempio: char * stringhe[4]; definisce un vettore di 4 puntatori a carattere

Dettagli

Perché il linguaggio C?

Perché il linguaggio C? Il linguaggio C 7 Perché il linguaggio C? Larga diffusione nel software applicativo Standard di fatto per lo sviluppo di software di sistema Visione a basso livello della memoria Capacità di manipolare

Dettagli

Complementi. - Ridefinizione di tipo - - Costrutto switch - - Programmazione su più file - - Parametri della funzione main - Funzione system -

Complementi. - Ridefinizione di tipo - - Costrutto switch - - Programmazione su più file - - Parametri della funzione main - Funzione system - Complementi - Ridefinizione di tipo - - Costrutto switch - - Programmazione su più file - - Parametri della funzione main - Funzione system - Università degli Studi di Brescia Prof. Massimiliano Giacomin

Dettagli

Precedenza e associatività. Complementi sul C - 2. Esempi. Esempi

Precedenza e associatività. Complementi sul C - 2. Esempi. Esempi Complementi sul C - 2 Ver. 2.4 2010 - Claudio Fornaro - Corso di programmazione in C Precedenza e associatività () [] ->. S D! ~ ++ + * & (cast ) sizeof S D * / % S D + - (somma e sottrazione) S D >

Dettagli

Compendio sottoinsieme del C++ a comune col C. (Libreria standard, Input/Output, Costanti, Dichiarazioni e typedef, Memoria Dinamica)

Compendio sottoinsieme del C++ a comune col C. (Libreria standard, Input/Output, Costanti, Dichiarazioni e typedef, Memoria Dinamica) Compendio sottoinsieme del C++ a comune col C (Libreria standard, Input/Output, Costanti, Dichiarazioni e typedef, Memoria Dinamica) Librerie 1/2 Il solo insieme di istruzioni di un linguaggio di programmazione

Dettagli

Lezione 9: Puntatori a funzioni. Tipi enumerativi e orientati ai bit

Lezione 9: Puntatori a funzioni. Tipi enumerativi e orientati ai bit Lezione 9: Puntatori a funzioni. Tipi enumerativi e orientati ai bit Vittorio Scarano Laboratorio di Informatica I Corso di Laurea in Informatica Università degli Studi di Salerno Struttura della lezione

Dettagli

Università degli Studi di Cassino e del Lazio Meridionale Corso di Fondamenti di Informatica Allocazione dinamica di memoria

Università degli Studi di Cassino e del Lazio Meridionale Corso di Fondamenti di Informatica Allocazione dinamica di memoria di Cassino e del Lazio Meridionale Corso di Informatica Allocazione dinamica di memoria Anno Accademico 2015/2016 Francesco Tortorella Allocazione dinamica di memoria Finora abbiamo considerato variabili

Dettagli

Funzioni e. Alessandra Giordani Mercoledì 16 maggio 2012

Funzioni e. Alessandra Giordani Mercoledì 16 maggio 2012 Funzioni e passaggio parametri Alessandra Giordani agiordani@disi.unitn.it Mercoledì 16 maggio 2012 http://disi.unitn.it/~agiordani/ Cosa vedremo oggi Le funzioni Il passaggio dei parametri Le dichiarazioni

Dettagli

La gestione della memoria

La gestione della memoria La gestione della memoria DOTT. ING. LEONARDO RIGUTINI DIPARTIMENTO INGEGNERIA DELL INFORMAZIONE UNIVERSITÀ DI SIENA VIA ROMA 56 53100 SIENA UFF. 0577234850-7102 RIGUTINI@DII.UNISI.IT HTTP://WWW.DII.UNISI.IT/~RIGUTINI/

Dettagli

ERRATA CORRIGE. void SvuotaBuffer(void); void SvuotaBuffer(void) { if(getchar()!=10) {svuotabuffer();} }

ERRATA CORRIGE. void SvuotaBuffer(void); void SvuotaBuffer(void) { if(getchar()!=10) {svuotabuffer();} } ERRATA CORRIGE Pulizia del buffer di input: come fare? (1) Dopo aver richiamato getchar() per prelevare un carattere dal buffer di input, inseriamo una seconda chiamata a getchar(), senza assegnare il

Dettagli

Il linguaggio C Strutture

Il linguaggio C Strutture Il linguaggio C Strutture Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna http://www.moreno.marzolla.name/ Linguaggio C -- Strutture 2 Ringraziamenti Questi

Dettagli

Introduzione al C. Unità 8 Stringhe

Introduzione al C. Unità 8 Stringhe Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Introduzione al C Unità 8 Stringhe D. Bloisi, A. Pennisi, S. Peluso, S. Salza Sommario Unità 8 Array di

Dettagli

Array multidimensionali e stringhe

Array multidimensionali e stringhe Andrea Marin Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time a.a. 2011/2012 Array uni-dimensionali (richiami) Dichiarazione: int vet[100]; float x[50]; Gli elementi

Dettagli

STRINGHE: ARRAY DI CARATTERI! a p e \0

STRINGHE: ARRAY DI CARATTERI! a p e \0 STRINGHE: ARRAY DI CARATTERI! Una stringa di caratteri in C è un array di caratteri terminato dal carattere '\0' s a p e \0 0 1 2 3 Un vettore di N caratteri può dunque ospitare stringhe lunghe al più

Dettagli

Corso di Fondamenti di Informatica

Corso di Fondamenti di Informatica Corso di Fondamenti di Informatica Il tipo puntatore; l allocazione dinamica della memoria Claudio De Stefano - Corso di Fondamenti di Informatica 1 puntatori una variabile di tipo puntatore al tipo x

Dettagli

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori Gli array Array e puntatori Laboratorio di Informatica I un array è un insieme di elementi (valori) avente le seguenti caratteristiche: - un array è ordinato: agli elementi dell array è assegnato un ordine

Dettagli

Esercizi di programmazione in linguaggio C English Dictionary

Esercizi di programmazione in linguaggio C English Dictionary Esercizi di programmazione in linguaggio C English Dictionary Il file di testo wordnet.txt contiene un certo numero di parole (word) e il corrispondente significato (meaning) secondo il seguente formato:

Dettagli

Argomenti Avanzati.! I puntatori! Stack! Visibilità delle Variabili

Argomenti Avanzati.! I puntatori! Stack! Visibilità delle Variabili Linguaggio C Argomenti Avanzati! I puntatori! Stack! Visibilità delle Variabili 2 ! Il C consente di associare ai tipi di dati nomi definiti dal programmatore, mediante la parola chiave typedef! Dal punto

Dettagli

Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.

Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore. Linguaggio C Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore. 1 Funzioni Generalizzazione del concetto di funzione algebrica: legge che associa a valori delle variabili

Dettagli

Tipi di dati strutturati e Linguaggio C. Record o strutture Il costruttore struct in C

Tipi di dati strutturati e Linguaggio C. Record o strutture Il costruttore struct in C Tipi di dati strutturati e Linguaggio C Record o strutture Il costruttore struct in C Dati strutturati Record Un record o struttura è una struttura dati ottenuta aggregando elementi di tipo diverso che

Dettagli

Strategie di programmazione

Strategie di programmazione Funzioni Funzioni in C Il concetto di funzione Parametri formali e attuali Il valore di ritorno Definizione e chiamata di funzioni Passaggio dei parametri Corpo della funzione 2 Funzioni in C Strategie

Dettagli

I puntatori (richiamo)

I puntatori (richiamo) I puntatori (richiamo) Puntatori Un puntatore è una variabile che assume come valore un indirizzo in memoria L uso dei puntatori permette di: mantenere riferimenti ad altre variabili (è un punto di accesso

Dettagli

Allocazione della memoria. Allocazione dinamica della memoria. Allocazione della memoria. Allocazione automatica

Allocazione della memoria. Allocazione dinamica della memoria. Allocazione della memoria. Allocazione automatica Allocazione dinamica della memoria Ver. 2.4 2010 - Claudio Fornaro - Corso di programmazione in C Allocazione della memoria Il termine allocazione viene utilizzato per indicare l assegnazione di un blocco

Dettagli

Array Tipi di dato semplici e strutturati strutturati array elementi omogenei numero d ordine indice lunghezza dimensione

Array Tipi di dato semplici e strutturati strutturati array elementi omogenei numero d ordine indice lunghezza dimensione Array Tipi di dato semplici e strutturati i tipi di dato visti finora erano tutti semplici: int, char, float,... i dati manipolati sono spesso complessi (o strutturati) con componenti elementari o strutturate

Dettagli

Il blocco che costituisce il corpo di una funzione/procedura può contenere dichiarazioni di variabili. Esempio:

Il blocco che costituisce il corpo di una funzione/procedura può contenere dichiarazioni di variabili. Esempio: Variabili locali Il blocco che costituisce il corpo di una funzione/procedura può contenere dichiarazioni di variabili. void leggivettore(int v[], int dim) int i; /* i E UNA VARIABILE LOCALE */ for (i

Dettagli

Linguaggio C. strutture di controllo: strutture iterative. Università degli Studi di Brescia. Docente: Massimiliano Giacomin

Linguaggio C. strutture di controllo: strutture iterative. Università degli Studi di Brescia. Docente: Massimiliano Giacomin Linguaggio C strutture di controllo: strutture iterative Università degli Studi di Brescia Docente: Massimiliano Giacomin Elementi di Informatica e Programmazione Università di Brescia 1 Strutture iterative

Dettagli

Funzioni, Stack e Visibilità delle Variabili in C

Funzioni, Stack e Visibilità delle Variabili in C Funzioni, Stack e Visibilità delle Variabili in C Programmazione I e Laboratorio Corso di Laurea in Informatica A.A. 2016/2017 Calendario delle lezioni Lez. 1 Lez. 2 Lez. 3 Lez. 4 Lez. 5 Lez. 6 Lez. 7

Dettagli

Lezione 8. Sottoprogrammi

Lezione 8. Sottoprogrammi Lezione 8 Il linguaggio C: Sottoprogrammi e Funzioni I puntatori Input/Output su file Sottoprogrammi Per risolvere un problema si può scomporlo in problemi più semplici e comporre le loro soluzioni in

Dettagli

Ottenere una modifica del parametro attuale

Ottenere una modifica del parametro attuale Ottenere una modifica del parametro attuale Le variabili passate come parametri a una funzione, se alterate durante l esecuzione, non cambiano valore all uscita dalla funzione (parametri passati per valore)

Dettagli

Consideriamo un vettore allocato dinamicamente

Consideriamo un vettore allocato dinamicamente Libreria per per la la gestione/manipolazione dei dei vettori Consideriamo un vettore allocato dinamicamente int * v; v = (int *) malloc (n * sizeof (int) ); Conversione di tipo da void * a int * Numero

Dettagli

Si possono applicare solo a variabili (di tipi interi, floating o puntatori), ma non a espressioni generiche (anche se di questi tipi).

Si possono applicare solo a variabili (di tipi interi, floating o puntatori), ma non a espressioni generiche (anche se di questi tipi). Operatori di incremento e decremento: ++ e -- ++ e -- sono operatori unari con la stessa priorità del meno unario e associatività da destra a sinistra. Si possono applicare solo a variabili (di tipi interi,

Dettagli

Array k-dimensionali

Array k-dimensionali Informatica B a.a 2005/06 (Meccanici 4 squadra) Scaglione: da PO a ZZZZ PhD. Ing. Michele Folgheraiter Array k-dimensionali In C è possibile definire array con più dimensioni (ANSI C massimo k=12), per

Dettagli

Linguaggio C - sezione dichiarativa: costanti e variabili

Linguaggio C - sezione dichiarativa: costanti e variabili Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C - sezione dichiarativa: costanti e variabili La presente

Dettagli

Strutture Dinamiche. Fondamenti di Informatica

Strutture Dinamiche. Fondamenti di Informatica Strutture Dinamiche Fondamenti di Informatica 1 Indice Allocazione e de-allocazione di memoria Liste e loro gestione Companies, srl 2 Allocazione e cancellazione di memoria malloc (sizeof (TipoDato));

Dettagli

Inside C : Puntatori. Indirizzo: operatore & p = &v; x = a; Puntatori Referenziazione e Dereferenziazione Arrays

Inside C : Puntatori. Indirizzo: operatore & p = &v; x = a; Puntatori Referenziazione e Dereferenziazione Arrays Pointers: Puntatori (I) Le variabili finora incontrate sono caratterizzate da un nome (o identificativo), un tipo, ed occupano un area di memoria di dimensione dipendente dal tipo. Per accedere ad una

Dettagli

Linguaggio C - Strutture

Linguaggio C - Strutture Strutture: Le strutture (talvolta chiamate aggregati), così come gli array, sono tipi di dati derivati. Indicano collezioni di variabili collegate sotto un unico nome. Le strutture possono contenere variabili

Dettagli

Passaggio parametri puntatore

Passaggio parametri puntatore Passaggio parametri puntatore Corso di Ingegneria Clinica BCLR Domenico Daniele Bloisi Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore Dipartimento di Ingegneria Informatica, Automatica e Gestionale

Dettagli

Programmazione (imperativa)

Programmazione (imperativa) Programmazione (imperativa) Corso di Laurea in Informatica Roberto Cordone DI - Università degli Studi di Milano Lezioni: Lunedì 12.00-13.00 e 14.00-16.00 Mercoledì 14.00-17.00 Laboratorio: Giovedì 12.00-13.00

Dettagli

Passaggio parametri puntatore Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Passaggio parametri puntatore Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Domenico Daniele Bloisi Docenti Parte I prof. Silvio Salza salza@dis.uniroma1.it http://www.dis.uniroma1.it/~salza/fondamenti.htm

Dettagli

Allocazione Dinamica della Memoria

Allocazione Dinamica della Memoria Allocazione Dinamica della Memoria Lorenzo Dusty Costa Federico Paolo Kircheis 30 Novembre 2011 1 Introduzione alle memoria dinamica Uno degli inconvenienti che spesso si incontrano nell'uso degli array

Dettagli

Parametri Formali di una Funzione e Record di Attivazione

Parametri Formali di una Funzione e Record di Attivazione Parametri Formali di una Funzione e Attivazione Un record di attivazione rappresenta il mondo di una funzione, e contiene tutto ciò che ne caratterizza l esistenza, tra cui ad esempio: le variabili locali

Dettagli

Esercitazione 9. Array come puntatori. Aritmetica dei puntatori. Array multidimensionali. Ricapitolazione su Ricorsione e Array.

Esercitazione 9. Array come puntatori. Aritmetica dei puntatori. Array multidimensionali. Ricapitolazione su Ricorsione e Array. Esercitazione 9 Array come puntatori Aritmetica dei puntatori Array multidimensionali Ricapitolazione su Ricorsione e Array Stringhe Array come puntatori Gli array e i puntatori in C sono strettamente

Dettagli