Laboratorio di Informatica
|
|
- Graziano Pisano
- 4 anni fa
- Visualizzazioni
Transcript
1 -- Conversione di tipo in C (V) -- Laboratorio di Informatica Ingegneria Meccanica Lezione 7, 22 novembre 2007 versione 24 novembre 2007 Renato Menicocci <rmenicocci@fub.it> <menicocci@die.uniroma1.it> Conversione esplicita di tipo può essere forzata con uno speciale operatore unario detto di conversione (o di type cast) Formati ( tipo ) ( espressione ) provoca la conversione del risultato di espressione al tipo specificato (che è tipo) (come se il risultato di espressione dovesse essere assegnato a una variabile del tipo specificato) (vedi avanti) ( tipo ) espressione ha un effetto che dipende da espressione (vedi avanti) Conversione di tipo in C (VI) Precedenza e associatività -- di utilizzazione Se r float e h e k int, allora r = ( float ) h / k ; provoca, ai fini della valutazione, la conversione di h da int a float e l assegnazione a r del valore float della divisione non intera tra h e k (ai fini della valutazione, k sarà promosso a float perchè coinvolto in un operazione con un tipo float) Per la precedenza dell operatore di conversione, se h e k int, ( float ) h / k ; equivale a ( float ) ( h ) / k ; Se h e k int, l effetto di ( float ) ( h / k ) ; è quello di convertire a float il risultato int di h / k (se r float, r = ( float ) ( h / k ) ; equivale a r = h / k ;)! (tipo) * / % + - < <= > >= ==!= && = += -= *= /= %= da destra a sinistra da destra a sinistra 3 4
2 -- Puntatori in C (I) -- Un puntatore è una variabile di un tipo speciale, detto (anch esso) puntatore, ed è caratterizzato dal fatto che il suo valore è utilizzabile per accedere a una variabile Se il valore del puntatore p è utilizzabile per accedere alla variabile v, si dice che v è puntata da p (o che p punta a v) In C, il tipo puntatore è un tipo derivato (anche l array lo è, mentre gli altri tipi visti finora sono tipi base) Formato dichiarazione tipo-puntato *nome ; int *iptr ; iptr è così dichiarato per puntare a una variabile di tipo int (attenzione: il valore di iptr è per ora indefinito) 5 -- Puntatori in C (II) -- Quando applicato a puntatori, il simbolo * indica un operatore unario detto di risoluzione del riferimento (indirection/dereferencing) Applicando l operatore * a un puntatore già dichiarato si accede alla variabile puntata da questo (il valore della variabile puntata può essere acquisito o modificato) E possibile far puntare un puntatore p a una variabile v assegnando a p il valore ottenuto applicando a v l operatore indirizzo & (attenzione: & è applicabile solo a variabili (non applicabile a costanti, espressioni, (e altro!)) Se p punta a v è possibile accedere al valore di v (per acquisirlo o per modificarlo) usando sia l espressione v sia l espressione *p 6 -- Puntatori in C (III) -- int *iptr ; /* iptr puntatore a tipo int */ int ia = 4, ib, ic = 8 ; /* ia, ib variabili int */ iptr = &ia ; /* iptr punta a variabile ia */ ib = *iptr ; /* ib assume il valore di ia (4) */ *iptr = ic ; /* ia assume il valore di ic (8) */ -- Puntatori in C (IV) -- Il significato di tipo-puntato *nome ; è: risolvendo il riferimento del puntatore nome (usando l operatore *), si accederà a una variabile di tipo tipopuntato Un puntatore è dichiarato quindi per un tipo specificato Data la dichiarazione tipo-puntato *nome ; è lecito utilizzare *nome ovunque sia accettabile la presenza di una variabile di tipo tipo-puntato 7 8
3 -- Puntatori in C (V) -- Istruzioni con esempi di espressioni con puntatori e variabili puntate (ipotesi: i, j puntatori a tipo int e x, y, z di tipo int) i = &x ; j = &y ; *i = *j x ; if ( z == *j * *i ) y = 0 ; *i = *i y ; *i += * j ; -- Puntatori in C (VI) -- A un puntatore (indipendentemente dal suo tipo-puntato) può essere assegnato lo speciale valore NULL per indicare la situazione in cui il puntatore non punta ad alcuna variabile (puntatore inattivo) int *iptr ; /* iptr ha valore indefinito */ iptr = NULL ; /* iptr ha valore definito (iptr inattivo) */ NULL può essere usato come valore di inizializzazione nella dichiarazione di un puntatore int *jptr = NULL ; Precedenza e associatività Puntatori e array in C (I) --! (tipo) * & * / % + - < <= > >= ==!= && = += -= *= /= %= da dx a sin da dx a sin E possibile far puntare un puntatore p a un elemento di un array v monodimensionale assegnando a p il valore ottenuto applicando all elemento di v l operatore indirizzo &; per puntare al primo elemento dell array (quello di indice 0) oltre ad applicare a questo l operatore indirizzo & si può anche usare il nome dell array (p puntatore a int e v array di 3 int) p = &v[ 2 ] ; /* p punta a v[ 2 ] */ *p = 21 ; /* v[ 2 ] = 21 */ p = v ; /* p punta a v[ 0 ] */ *p = 12 ; /* v[ 0 ] = 12 */ 11 12
4 -- Puntatori e array in C (II) -- Se un puntatore punta a un elemento di un array monodimensionale, si può ottenere che esso punti ad altri elementi dell array incrementando o decrementando, tramite gli operatori +, -, ++ e --, il valore del puntatore di un opportuno valore intero (vedi slide Aritmetica dei puntatori ) (p puntatore a int, v array di 7 int, b int) p = &v[ 2 ] ; /* p punta a v[ 2 ] */ p = p+1 ; /* p punta a v[ 3 ] */ p = p-2 ; /* p punta a v[ 1 ] */ b = *p ; /* b = v[ 1 ] */ b = *( p+5 ) ; /* b = v[ 6 ] */ Puntatori e array in C (III) e -- sono operatori validi per puntatori (vedi slide Aritmetica dei puntatori ) Attenzione all uso di pre/post-incremento (++) e pre/post-decremento (--) con puntatori (vedi tabella Precedenza e associatività ) Esempi (puntatore i punta a x di tipo int) ++*i ; equivale a ++( *i ) ; e la variabile puntata (x) sarà pre-incrementata (analogamente per --*i ;) *i++ ; equivale a *( i++ ) ; e il puntatore (i) sarà postincrementato (analogamente per *i-- ;) Puntatori e array in C (IV) Variabili (I) -- Si può usare il nome di un puntatore come se fosse il nome di un array monodimensionale (attenzione!) Se p è un puntatore e k un intero, p[ k ] equivale a *( p+k ) (p puntatore a int, v array di 6 int, b int) p = &v[ 2 ] ; /* p punta a v[ 2 ] */ p = p+1 ; /* p punta a v[ 3 ] */ p = p-2 ; /* p punta a v[ 1 ] */ b = p[ 4 ] ; /* b = v[ 5 ] */ 15 Il nome di una variabile (di un qualunque tipo) è associato univocamente alla locazione di memoria in cui il valore della variabile è registrato int k = 10, h ; /* valore di h indefinito (indicato con?) */ 10? L accesso alla locazione di memoria assegnata a una variabile (cioè l accesso al valore di una variabile) avviene usando il nome della variabile (questo sarà quindi equivalente all indirizzo della locazione assegnata) k h 16
5 -- Variabili (II) Variabili (III) -- indirizzo N-2 N-1 N N+1 N+2 10? k h Quanto detto vale anche per variabili di tipo puntatore int k = 10, *iptr ; iptr = &k ; /* indirizzo associato a k assegnato ora a iptr */ In questa rappresentazione 1. Si assume che una locazione di memoria abbia capacità sufficiente per la memorizzazione di un valore di tipo qualunque 2. Le posizioni di k e h in memoria sono arbitrarie 3. Si mostrano gli indirizzi delle locazioni di memoria indirizzo N-2 N-1 N 10 iptr N N+1 N+2 k int k = 10, *iptr ; iptr = &k ; /* iptr punta a k */ *iptr = 8 ; /* k assume valore 8 */ indirizzo N-2 N-1 iptr -- Variabili (IV) -- N 8 *iptr N N+1 N+2 L accesso al valore di k tramite iptr si ottiene applicando a iptr l operatore * di risoluzione del riferimento (*iptr attualmente associato alla stessa locazione a cui è associato k ) k Dimensioni delle variabili (I) -- Il numero di byte impiegati per memorizzare il valore di una variabile o di una costante dipende dal tipo di queste (già visti vari esempi) In C, ogni byte è univocamente individuabile da un indirizzo (l unità di memoria indirizzabile è il byte) L indirizzo associato a una variabile/costante è l indirizzo del primo dei byte di memoria utilizzati per registrare il valore della variabile/costante Il nome di una variabile è associato all indirizzo del primo dei byte di memoria in cui il suo valore è registrato (il tipo della variabile determina quanti altri byte devono essere considerati oltre al primo e permette quindi di accedere al valore della variabile) 20
6 indirizzo -- Dimensioni delle variabili (II) -- M-1 M M+1 M+2 M A 41 k ch In questa rappresentazione 1. Una locazione di memoria ha capacità di un byte 2. Le posizioni di k e ch in memoria sono arbitrarie 3. k (un tipo intero) occupa 2 byte e ch occupa 1 byte (tipo char) 4. I valori dei singoli byte di k e ch sono rappresentati in esadecimale 5. Non è indicato come i valori dei byte assegnati a una variabile determinano il valore di questa Operatore sizeof (I) -- La dimensione in byte di una specifica variabile o di una generica variabile di uno specificato tipo può essere ottenetuta con l operatore sizeof Un espressione contenente sizeof è valutata durante la compilazione Il valore fornito da sizeof è del tipo speciale size_t (definito in stddef.h) (size_t è assimilabile a un intero senza segno (può essere necessario l uso dell operatore type-cast per forzare la conversione al tipo (intero) desiderato) Formati sizeof variabile sizeof( tipo ) Operatore sizeof (II) -- Quando applicato a un array, sizeof fornisce il numero di byte impiegati per la memorizzazione di tutti gli elementi dell array (a condizione che la dimensione dell array risulti definita al momento della compilazione) Il numero di elementi di un array di dimensione definita può essere ottenuto dividendo il valore di sizeof nome-array (dimensione totale in byte) per il valore di sizeof( tipo-elementi-array ) (dimensione di un valore del tipo specificato in byte) o per il valore di sizeof nome-array[ indice-lecito ] (dimensione di un singolo elemento di nome-array in byte) -- Operatore sizeof (III) -- Esempi printf( ''%d'', ( int ) sizeof( double )) ; stampa il numero di byte impiegati per un double printf( ''%d'', ( int ) sizeof k ) ; stampa il numero di byte impiegati per la variabile k printf( ''%d'', ( int ) sizeof( int * )) ; stampa il numero di byte impiegati per un puntatore a int 23 24
7 -- Operatore sizeof (IV) -- Esempi /* double v[ 10 ] ; */ printf( ''sizeof v = %d'', ( int ) sizeof v ) ; stampa il numero di byte per 10 double /* int A[ 15 ], b ; */ b = (( int ) sizeof A ) / (( int ) sizeof( int )) ; assegna a b il valore 15 /* float w[ 9 ], x ; */ x = (( int ) sizeof w ) / (( int ) sizeof w[ 0 ] ) ; assegna a x il valore 9 -- Precedenza e associatività --! (tipo) * & sizeof da dx a sin * / % + - < <= > >= ==!= && = += -= *= /= %= da dx a sin Aritmetica dei puntatori (I) -- Su un puntatore possono essere eseguite le operazioni di Incremento e decremento (++/--) Somma di un intero Sottrazione di un intero Se si somma/sottrae un intero a/da un puntatore, questo viene incrementato/decrementato dell intero moltiplicato per la dimensione in byte del tipo a cui il puntatore punta (ricordare che, in C, la memoria è vista come una successione di celle, ognuna di capacità pari a un byte) -- Aritmetica dei puntatori (II) -- La regola precedente può essere compresa osservando quanto segue Gli elementi di un array sono memorizzati in successione ordinata, a partire dall elemento di indice 0 Ogni elemento di un array occupa in memoria lo stesso numero k di byte consecutivi, con k determinato dal tipo degli elementi dell array Un array di n elementi di un dato tipo occupa in memoria n*k byte, con k determinato dal tipo degli elementi dell array 27 28
8 -- Aritmetica dei puntatori (III) -- 1: Se iptr è un puntatore al tipo intero int e un intero int occupa 2 byte, iptr += 3 ; incrementa il valore di iptr di 6 /* int v[ 8 ], *p, a ; */ p = v ; /* p punta a v[ 0 ] */ a = *( p+3 ) ; /* a = v[ 3 ] */ 2: Se fptr è un puntatore al tipo reale float e un reale float occupa 4 byte, fptr += 4 ; incrementa il valore di fptr di 16 /* float w[ 5 ], *q, x ; */ q = &w[ 1 ] ; /* q punta a w[ 1 ] */ x = *( q+1 ) ; /* x = w[ 2 ] */ -- Puntatori e funzioni (I) -- E possibile dichiarare/definire funzioni con puntatori tra i propri argomenti Formato del singolo argomento puntatore (vedi avanti) tipo-puntato *nome (nome opzionale nel prototipo) Nella chiamata di una funzione, gli argomenti attuali sono sempre passati per valore Quando si passa un puntatore a una funzione, si fornisce alla funzione uno strumento per accedere alla variabile puntata dal puntatore Passare un array a una funzione equivale a passare (per valore) un puntatore al primo elemento dell array Puntatori e funzioni (II) -- Per la chiamata di una funzione con argomenti puntatori è necessario (per evitare sorprese) utilizzare argomenti attuali compatibili con il prototipo della funzione Se nella dichiarazione/definizione di una funzione si è specificato l argomento tipo-puntato *nome (nome opzionale nel prototipo) allora, per questo argomento, nella chiamata della funzione si può usare un puntatore per il tipo tipo-puntato l indirizzo di una variabile v di tipo tipo-puntato (ottenuto con espressione &v) un array monodimensionale a con elementi di tipo tipo-puntato (equivale all uso di &a[ 0 ]) Funzione con argomenti puntatori (I) -- void scambia( int *, int * ) ; void scambia( int *iptr, int *jptr ) { int temp ; temp = *iptr ; *iptr = *jptr ; *jptr = temp ; } int h, k ; scambia( &h, &k ) ; /* chiamata con espressioni &h e &k: la funzione riceve gli indirizzi di h e k e accede in memoria a questi indirizzi producendo lo scambio dei valori di h e k */ 32
9 -- Funzione con argomenti puntatori (II) -- void scambia( int *, int * ) ; void scambia( int *iptr, int *jptr ) { /* vedi slide precedente */ } int h, k ; int *p, *q ; p = &h ; q = &k ; scambia( p, q ) ; /* chiamata con puntatori p, puntante ad h, e q, puntante a k: la funzione riceve gli indirizzi di h e k e accede in memoria a questi indirizzi producendo lo scambio dei valori di h e k */ Funzione senza argomenti puntatori -- void scambia( int, int ) ; void scambia( int i, int j ) { int temp ; temp = i ; i = j ; j = temp ; } int h, k ; scambia( h, k ) ; /* chiamata con i valori di h e k: la funzione non riceve gli indirizzi di h e k e non accede in memoria a questi indirizzi (i valori di h e k resteranno invariati) */ min e max di array monodimensionale (I) -- void mm( float v[ ], int dim, float *pm, float *pm ) ; void mm( float v[ ], int dim, float *pm, float *pm ) { int i ; *pm = *pm = v[ 0 ] ; for ( i = 1 ; i < dim ; i++ ) { if ( v[ i ] < *pm ) *pm = v[ i ] ; if ( v[ i ] > *pm ) *pm = v[ i ] ; } } /* a fine esecuzione della funzione mm le variabili puntate da pm e pm avranno valori determinati da questa */ min e max di array monodimensionale (II) -- void mm( float v[ ], int dim, float *pm, float *pm ) ; float f[ 10 ], min, max ; int d ; mm( f, d, &min, &max ) ; /* si assume 0 <= d < 10 */ /* a fine esecuzione della funzione mm le variabili min e max avranno valori determinati da questa */ 36
10 -- Stringhe (I) -- Tipo char usato per la dichiarazione di variabili carattere ( : char c1 = 'A' ; ) Tecnicamente si tratta di un tipo intero i cui valori sono rappresentati su singolo byte Ordinariamente, una stringa è una sequenza di caratteri In C, il termine stringa (string) indica un array monodimensionale di elementi di tipo char contenente lo speciale carattere '\0' char deg[ 4 ] ; deg è un array di 4 caratteri: se usato come stringa, deg avrà al massimo 3 caratteri utili (il quarto sarà il carattere '\0') -- Stringhe (II) -- E possibile usare dichiarazione con inizializzazione, specificando ogni carattere, compreso quello di terminazione char deg[ 4 ] = { 'c', 'a', 'p', '\0' } ; E possibile usare dichiarazione con inizializzazione con stringa costante (sequenza di caratteri limitata da " e "): in questo caso, l inserimento del carattere '\0' di terminazione è automatico char deg[ 4 ] = "cap" ; a deg[ 3 ] sarà assegnato automaticamente il valore '\0' Stringhe (III) -- Nella dichiarazione con inizializzazione, la dimensione della stringa può essere omessa poiché risulta stabilita dalla inizializzazione stessa char deg[ ] = "cap" ; deg ha dimensione 4 (3 caratteri utili più carattere '\0') -- Stringhe (IV) -- Una stringa è un array di caratteri terminato con un carattere speciale si può accedere in lettura/scrittura a uno specifico elemento della stringa utilizzando uno specifico indice char s[ 3 ] = { 'y', 'n', '\0' }, c ; c = s[ 0 ] ; /* c vale 'y' */ s[ 0 ] = s[ 1 ] ; /* s[ 0 ] vale 'n' */ s[ 1 ] = c ; /* s[ 1 ] vale 'y' */ c = s[ 2 ] ; /* c vale '\0' */ 39 40
11 -- Stringhe (V) -- Attenzione a non confondere un singolo carattere 'c' con una stringa costante di un solo carattere "c" (che contiene 'c' e '\0') Una stringa (array di caratteri terminato con carattere '\0') può essere stampata (carattere di terminazione escluso) con funzione printf usando la specifica di conversione %s e passando a printf una stringa costante o un riferimento all array di caratteri sorgente (un riferimento è il nome dell array (indirizzo del primo carattere), o l indirizzo di uno dei caratteri dell array, o un puntatore a un elemento dell array) 41
Laboratorio di Informatica
Record Laboratorio di Informatica Ingegneria Meccanica Lezione 9, 6 dicembre 2007 versione 18 dicembre 2007 Renato Menicocci Array: collezione di dati omogenei
DettagliPuntatori 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
DettagliVerso 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
DettagliLaboratorio 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
DettagliLaboratorio di informatica Ingegneria meccanica
( 1 ) Rappresentazione di numeri reali Laboratorio di informatica Ingegneria meccanica Lezione 8 26 novembre 2007 Numerazione posizionale: d n d 1 d 0.d -1 d -2 d -m rappresenta d n B n + + d 1 B 1 + d
DettagliIntroduzione 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 2017
DettagliPOINTERS. 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.
DettagliLaboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 5 31/10/2013
Laboratorio di Programmazione 1 1 Docente: dr. Damiano Macedonio Lezione 5 31/10/2013 Original work Copyright Sara Migliorini, University of Verona Modifications Copyright Damiano Macedonio, University
DettagliCosa è una variabile?
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 contenere il valore
DettagliCorso di Informatica A.A
Corso di Informatica A.A. 2009-2010 Lezione 10 Lezione 10 1 Inside C : Puntatori Puntatori Referenziazione e Dereferenziazione Pointers: Puntatori Le variabili finora incontrate sono caratterizzate da
DettagliPuntatori e array. Violetta Lonati
Puntatori e array Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Violetta Lonati Puntatori e array
DettagliIntroduzione 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
DettagliPuntatori. 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
DettagliPuntatori. 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
DettagliPuntatori 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 *
DettagliOgni 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
DettagliC: panoramica. Violetta Lonati
C: panoramica Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica AA 2009/2010 Violetta Lonati
DettagliLaboratorio di Informatica Ingegneria Clinica Lezione 9/11/2011. Prof. Raffaele Nicolussi
Laboratorio di Informatica Ingegneria Clinica Lezione 9/11/2011 Prof. Raffaele Nicolussi FUB - Fondazione Ugo Bordoni Via del Policlinico, 147-00161 Roma Università degli Studi La Sapienza Fondamenti di
DettagliLaboratorio di Informatica I
Struttura della lezione Lezione 6: Array e puntatori Vittorio Scarano Laboratorio di Informatica I Corso di Laurea in Informatica Università degli Studi di Salerno Una funzione per i numeri di Fibonacci
DettagliCostanti e Variabili
Parte 3 Costanti e Variabili Identificatori Un identificatore è un nome che viene associato a diverse entità (costanti, tipi, variabili, funzioni, ecc.) e serve ad identificare la particolare entità Gli
Dettagli&v restituisce l indirizzo della zona di memoria allocata per v.
Puntatori Sia v una variabile di tipo T. Al momento della creazione della variabile v il sistema alloca memoria sufficiente a contenere i valori appartenenti al tipo T. &v restituisce l indirizzo della
DettagliLezione 6: Array e puntatori
Lezione 6: Array e puntatori Vittorio Scarano Laboratorio di Informatica I Corso di Laurea in Informatica Università degli Studi di Salerno Struttura della lezione Una funzione per i numeri di Fibonacci
DettagliProgrammazione (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
DettagliParametri passati per indirizzo. Puntatori Vogliamo modificare la parte del codice di bubble che realizza lo scambio dei valori:
Parametri passati per indirizzo. Puntatori Vogliamo modificare la parte del codice di bubble che realizza lo scambio dei valori: tmp = a[j-1]; a[j-1] = a[j]; a[j] = tmp; sostituiamo questa riga con un
DettagliPuntatori. 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
DettagliPuntatori. Stefano Ferrari. Università degli Studi di Milano Programmazione. anno accademico
Puntatori Stefano Ferrari Università degli Studi di Milano stefanoferrari@unimiit Programmazione anno accademico 2016 2017 Puntatori I processori organizzano la memoria in N celle di dimensione fissata
DettagliCorso di Informatica A.A
Corso di Informatica A.A. 2009-2010 Lezione 11 Corso di Informatica 2009-2010 Lezione 11 1 Utilizzo dei puntatori Funzioni Perche i Puntatori? I puntatori hanno tre importanti applicazioni: 1. Passaggio
DettagliFondamenti 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
DettagliFIL I Puntatori. Michele Nappi biplab.unisa.it. 15/12/2014 M. Nappi/FIL 1
FIL I Puntatori Michele Nappi mnappi@unisa.it biplab.unisa.it 15/12/2014 M. Nappi/FIL 1 Introduzione I puntatori Una delle caratteristiche più potenti del C, ma difficile da padroneggiare Si usano per
DettagliStrutture Dati per Inserimento Ordinato. Luca Abeni
Strutture Dati per Inserimento Ordinato Luca Abeni Esempio: Ordinamento di Numeri A cosa servono i tipi di dato strutturati? Non bastano i tipi scalari? Capiamolo con un esempio... Problema: dato un insieme
DettagliIndirizzi e valori. Qualcuno afferma di avere bisogno di pane. Due possibili risposte: Fornisco l indirizzo di un panificio. Fornisco delle pagnotte
Puntatori Indirizzi e valori Qualcuno afferma di avere bisogno di pane Due possibili risposte: Fornisco delle pagnotte Fornisco l indirizzo di un panificio Passo un valore Passo un riferimento Indirizzi
DettagliPuntatore. Ritorniamo sul problema dell accesso alle variabili
Puntatori Puntatore Ritorniamo sul problema dell accesso alle variabili Nel linguaggio di von Neumann attraverso il loro indirizzo Nei linguaggi di alto livello attraverso il loro nome Però in taluni casi
DettagliGli Operatori. Linguaggio C. Gli Operatori. Esempi sull uso dell Operatore di Assegnamento. L Operatore di Assegnamento
Linguaggio C Gli Operatori Gli Operatori Gli operatori sono simboli (sia singoli caratteri che loro combinazioni) specificano come devono essere manipolati gli operandi dell espressione Operatori aritmetici
Dettagli#include <stdio.h> /* l esecuzione comincia dalla funzione main */ int main()
Primi passi Il mio primo programma #include /* l esecuzione comincia dalla funzione main */ int main() { printf( Hello World!\n" ); return 0; /* il programma termina con successo */ } /* fine
DettagliTipi di dato. Il concetto di tipo di dato viene introdotto per raggiungere due obiettivi:
Tipi di dato Il concetto di tipo di dato viene introdotto per raggiungere due obiettivi: esprimere in modo sintetico la loro rappresentazione in memoria, e un insieme di operazioni ammissibili permettere
DettagliIntroduzione alla programmazione in linguaggio C
Introduzione alla programmazione in linguaggio C Il primo programma in C commento Header della libreria Funzione principale Ogni istruzione in C va terminata con un ; Corso di Informatica AA. 2007-2008
DettagliIl corpo di tutte le funzioni deve essere contenuto tra parentesi graffe
Primi passi Il mio primo programma #include /* l esecuzione comincia dalla funzione main */ int main() { printf( Hello World!\n" ); return 0; /* il programma termina con successo */ } /* fine
DettagliIntroduzione 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 Violetta Lonati
DettagliIntroduzione al linguaggio C Funzioni
Introduzione al linguaggio C Funzioni Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Violetta Lonati
DettagliLezione 12: Allocazione Dinamica della Memoria
Lezione 12: Allocazione Dinamica della Memoria Laboratorio di Elementi di Architettura e Sistemi Operativi 17 Aprile 2013 Puntatori e vettori Puntatori ed indirizzi Semplificando, la memoria di un computer
DettagliSi 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,
DettagliI puntatori. DD Cap.7 pp KP Cap.6 pp
I puntatori DD Cap.7 pp.245-280 KP Cap.6 pp.219-235 Cos è un puntatore Un puntatore è una variabile che assume come valore un indirizzo di memoria. Il nome di una variabile fa quindi riferimento ad un
DettagliUnità 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;
DettagliVariabili e assegnazione
Corso di Laurea Ingegneria Civile Fondamenti di Informatica Variabili e assegnazione Carla Limongelli Marzo 2009 Variabili e assegnazione 1 Contenuti Variabili a ab e assegnazionea e Variabili e aree di
DettagliIl 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;
DettagliCapitolo 11. Puntatori
1 Capitolo 11 Puntatori 2 Variabili puntatore Cerchiamo di capire come le informazioni sono memorizzate nella memoria del computer La memoria è un sequenza di byte Ogni byte è composto da 8 bit: Ogni byte
DettagliLaboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 19 14/04/2014
Laboratorio di Programmazione 1 1 Docente: dr. Damiano Macedonio Lezione 19 14/04/2014 Puntatori I puntatori sono tipi di dati che rappresentano la posizione (indirizzi di memoria) di elementi (oggetti)
DettagliIntroduzione al C. Unità 6 Puntatori. S. Salza, C. Ciccotelli, D. Bloisi, S. Peluso, A. Pennisi
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Introduzione al C Unità 6 Puntatori S. Salza, C. Ciccotelli, D. Bloisi, S. Peluso, A. Pennisi Sommario
DettagliQuando è necessario elaborare una certa quantità di dati omogenei si possono usare variabili indicizzate: int a0, a1, a2;
Array Quando è necessario elaborare una certa quantità di dati omogenei si possono usare variabili indicizzate: int a0, a1, a2; Il C supporta questo uso attraverso il tipo di dati array (o vettore): int
DettagliDichiarazioni e tipi predefiniti nel linguaggio C
Politecnico di Milano Dichiarazioni e tipi predefiniti nel linguaggio C Variabili, costanti, tipi semplici, conversioni di tipo. Premessa Programmi provati sul compilatore Borland C++ 1.0 Altri compilatori:
DettagliLaboratorio di informatica Ingegneria meccanica
Interi in complemento a 2 () Laboratorio di informatica Ingegneria meccanica Lezione 5 29 ottobre 2007 Con N bit sono rappresentabili tutti gli interi nell'intervallo [-2^(N-), 2^(N-)-] Esempio: 6 bit,
DettagliLaboratorio di Informatica I
Struttura della lezione Lezione : Elementi lessicali del C Vittorio Scarano Corso di Laurea in Informatica Elementi lessicali e token Costanti Identificatori Operatori operatori di incremento/decremento
DettagliCapitolo 12. Puntatori ed array
1 Capitolo 12 Puntatori ed array Introduzione 2 Il C permette di eseguire addizioni e sottrazioni con i puntatori Pertanto possiamo gestire gli array usando i puntatori al posto degli indici L interconnessione
DettagliPuntatori (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
DettagliProf. G. Ascia. I puntatori. Fondamenti di Informatica
I puntatori 1 Associazione Variabile-Indirizzo Tutte le volte che in un programma si dichiarano delle variabili, l'esecutore associa alla variabile un indirizzo. Es. Dato il programma #include
DettagliLinguaggio C. Vettori, Puntatori e Funzioni Stringhe. Università degli Studi di Brescia. Prof. Massimiliano Giacomin
Linguaggio C Vettori, Puntatori e Funzioni Stringhe Università degli Studi di Brescia Prof. Massimiliano Giacomin SCHEMA DELLA LEZIONE RELAZIONE TRA VETTORI E PUNTATORI (e le stringhe letterali come caso
DettagliEsercitazione di Reti degli elaboratori
Esercitazione di Prof.ssa Chiara Petrioli Christian Cardia, Gabriele Saturni Cosa vedremo in questa lezione? Gli Array Gli array multidimensionali Le stringhe I puntatori Esercizi Pagina 1 Gli Array Definizione
DettagliLinguaggio 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
DettagliPUNTATORI. Introduzione. puntatore. L operatore
PUNTATORI Introduzione Dichiarazione ed inizializzazione delle variabili di tipo puntatore L operatore puntatore Chiamata di funzioni per indirizzo Espressioni ed aritmetica dei puntatori Puntatori ed
DettagliLezione 8: Stringhe ed array multidimensionali
Lezione 8: Stringhe ed array multidimensionali Vittorio Scarano Corso di Laurea in Informatica Università degli Studi di Salerno Struttura della lezione AVVISO: la lezione di laboratorio di 28/5 non si
DettagliLinguaggio 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
DettagliPrimi esempi di programmi. Il tipo int Le variabili Altri tipi interi Operatori di assegnazione
Primi esempi di programmi Il tipo int Le variabili Altri tipi interi Operatori di assegnazione Il tipo int Un int permette di trattare numeri interi 4 byte (32 bit) con la tecnica del complemento a 2 (ma
DettagliParametri by reference. Funzioni. Passaggio dei parametri. Parametri by reference. Soluzione. Problemi
Funzioni Introduzione Operatori & e * Passaggio by reference Passaggio di vettori Esercizio strcpy 2 Passaggio dei parametri Il linguaggio C prevede il passaggio di parametri by value Il chiamato non può
DettagliRICORSIONE, PUNTATORI E ARRAY. Quarto Laboratorio
RICORSIONE, PUNTATORI E ARRAY Quarto Laboratorio 16 DICEMBRE 2011 SCADENZA TERZA ESERCITAZIONE FUNZIONI RICORSIVE ESERCIZIO Scrivere una funzione ricorsiva che, assegnati due interi N1 ed N2, restituisca
DettagliInside 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
DettagliIl linguaggio C funzioni e puntatori
Salvatore Cuomo Il linguaggio C funzioni e puntatori Lezione n. 8 Parole chiave: Linguaggio C, procedure, funzioni. Corso di Laurea: Informatica Insegnamento: Programmazione II, modulo di Laboratorio Email
DettagliLaboratorio di Informatica I
Struttura della lezione Lezione 5: Tipi di dati ed idiomi del C Vittorio Scarano Corso di Laurea in Informatica : soluzioni agli esercizi Tipi di dato Idiomi per la programmazione Priorità ed associatività
DettagliIl linguaggio C. Notate che...
Il linguaggio C Notate che... 1 Il C è un linguaggio a blocchi int main (void) { blocco } 2 Il C è un linguaggio a blocchi (2) Non è possibile mischiare dichiarazioni e comandi! int main (void) { } Dichiarazione
DettagliTipi di dati scalari (casting e puntatori) Alessandra Giordani Lunedì 10 maggio 2010
Tipi di dati scalari (casting e puntatori) Alessandra Giordani agiordani@disi.unitn.it Lunedì 10 maggio 2010 http://disi.unitn.it/~agiordani/ I tipi di dati scalari I tipi aritmetici, i tipi enumerativi
DettagliIntroduzione 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
DettagliAssociazione Variabile-Indirizzo
I puntatori Associazione Variabile-Indirizzo Tutte le volte che in un programma si dichiarano delle variabili, l'esecutore associa alla variabile un indirizzo. Es. Dato il programma #include
DettagliI/O da tastiera + Alessandra Giordani Lunedì 2 maggio
I/O da tastiera + costrutti while e if Alessandra Giordani agiordani@disi.unitn.it Lunedì 2 maggio 2011 http://disi.unitn.it/~agiordani/ Ripasso funzione printf() Usata per stampare il contenuto di una
DettagliLinguaggio 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
DettagliTipi di dato, Alessandra Giordani Lunedì 7 maggio 2011
Tipi di dato, memoria e conversioni Alessandra Giordani agiordani@disi.unitn.it Lunedì 7 maggio 2011 http://disi.unitn.it/~agiordani/ Il linguaggio C è esplicitamente tipato: occorre esplicitamente associare
DettagliDati due punti sul piano calcolare la loro distanza
Introduzione al C Primo esempio in C Dati due punti sul piano calcolare la loro distanza Soluzione: la distanza fra due punti si calcola secondo il teorema di Pitagora, con la formula: y Distanza = (lato12
DettagliPrecisazione sui tipi in ANSi C
Precisazione sui tipi in ANSi C Tipi primitivi del C Un tipo è costituito da un insieme di valori ed un insieme di operazioni su questi valori. Classificazione dei tipi primitivi del C scalari aritmetici:
DettagliVariabili e Funzioni. Informatica 1 / 19
Variabili e Funzioni Informatica 1 / 19 Programmi C e Un programma C e composto da funzioni e variabili Variabile: memorizza valori appartenenti ad un insieme di definizione (dipendente dal tipo) Funzione:
DettagliLezione 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
Dettaglipuntatori Lab. Calc. AA 2006/07 1
puntatori Lab. Calc. AA 2006/07 1 Attributi di un oggetto nome o identificatore; tipo; valore (o valori); indirizzo; Lab. Calc. AA 2006/07 2 Indirizzo Consideriamo la dichiarazione con inizializzazione:
DettagliGestione 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.
DettagliLinguaggio C. Tipi predefiniti e operatori. Università degli Studi di Brescia. Docente: Massimiliano Giacomin
Linguaggio C Tipi predefiniti e operatori Università degli Studi di Brescia Docente: Massimiliano Giacomin Elementi di Informatica e Programmazione Università di Brescia 1 RICHIAMI char 8 bit Valori interi
DettagliCorso di Laboratorio di Sistemi Operativi A.A
Corso di Laboratorio di Sistemi Operativi A.A. 2016 2017 Lezione 9 Ivan Scagnetto ivan.scagnetto@uniud.it Nicola Gigante gigante.nicola@spes.uniud.it Dipartimento di Scienze Matematiche, Informatiche e
DettagliCorso Programmazione
Corso Programmazione 2011-2012 (docente) Fabio Aiolli E-mail: aiolli@math.unipd.it Web: www.math.unipd.it/~aiolli Dipartimento di Matematica Pura ed Applicata Torre Archimede, Via Trieste 63 Puntatori,
DettagliLinguaggio C I puntatori
FONDAMENTI DI INFORMATICA Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI Facoltà di Ingegneria Università degli Studi di Udine Linguaggio C I puntatori 2001 Pier Luca Montessoro - Davide Pierattoni
DettagliLaboratorio di informatica Ingegneria meccanica
Laboratorio di informatica Ingegneria meccanica Lezione 7 19 novembre 2007 Concetto di modulo di un programma (1) Lo sviluppo di programmi complessi avviene tipicamente per composizione di moduli, ognuno
DettagliTipi di dati fondamentali. Tipi di dati fondamentali. Utilità dei tipi di dati nelle dichiarazioni. Il tipo di dati char. Codice ASCII.
Tipi di dati fondamentali Tipi di dati fondamentali Linguaggi di Programmazione I Ferdinando Cicalese caratteri: char signed char unsigned char interi short int long interi unsigned short unsigned unsigned
DettagliInformatica AA 2005/06. Programmazione M.A. Alberti. Operatori in Java 1. Operatori in Java. Espressioni aritmetiche. Espressioni booleane
Operatori in Java Operatori in Java Corso di laurea in Informatica Operatori aritmetici Operatori di uguaglianza e relazionali Operatori logici in espressioni booleane La precedenza degli operatori L associatività
DettagliPuntatori. 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
DettagliLezione 8: I Puntatori
Lezione 8: I Puntatori Laboratorio di Elementi di Architettura e Sistemi Operativi 2 Maggio 2012 Esercizi della lezione scorsa Esercizio 3: la calcolatrice 1. Realizzare un insieme di funzioni per gestire
DettagliFondamenti di Informatica
Strutture di dati Fondamenti di Informatica 11. Linguaggio C - Strutture / Tabelle / Puntatori Strutture /Tabelle Corso di Laurea in Ingegneria Informatica e dell Automazione A.A. 2012-2013 2 Semestre
DettagliProgrammazione C. Puntatori Array come puntatori
Programmazione C Puntatori Array come puntatori Perché usare gli indirizzi Tutto in C ha un valore int a = 4; significa che il valore della variabile a è 4, e che potrà essere modificato dal programma
DettagliLe strutture /1. struct temp {char titolo[200]; char autore[100]; int pagine; } ; typedef struct temp libro;
Le strutture /1 Le strutture rappresentano un tipo di variabile che, diversamente dagli array, consente di gestire in modo compatto, mediante un'unico identificatore, un insieme di valori che non possiedano
DettagliPuntatori. 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
DettagliCast implicito. Il cast è fatto automaticamente quando un tipo più basso viene assegnato ad un tipo più alto. byte short int long float double
Il cast Cast implicito Il cast è fatto automaticamente quando un tipo più basso viene assegnato ad un tipo più alto Per esempio: byte short int long float double int x = 10; float f; f = x; Il valore di
DettagliLab 02 Tipi semplici in C
Fondamenti di Informatica e Laboratorio T-AB Ingegneria Elettronica e Telecomunicazioni e Ingegneria dell Automazione a.a. 2009/2010 Lab 02 Tipi semplici in C Lab02 1 Obiettivo dell esercitazione Acquistare
DettagliI 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
DettagliUtilizza i tipi di dati comuni a tutto il framework.net Accesso nativo ai tipi.net (C# è nato con.net) Concetti fondamentali:
1 Tipi di dati 1 Tipi di dati Utilizza i tipi di dati comuni a tutto il framework.net Accesso nativo ai tipi.net (C# è nato con.net) Concetti fondamentali: Tutto è un oggetto Tutto eredita implicitamente
Dettagli