Il linguaggio C. Puntatori e Array
|
|
|
- Lamberto Riccio
- 8 anni fa
- Просмотров:
Транскрипт
1 Il linguaggio C Puntatori e Array
2 Puntatori I puntatori sono variabili i cui valori sono indirizzi di locazioni in cui sono memorizzate altre variabili architettura a 32 bit: indirizzi, ma non si usa unsigned int come tipo (tipo=valori + operazioni) hanno senso somme e sottrazioni, non altre operazioni soprattutto si definisce l operazione per referenziare la variabile identificata dal valore del puntatore
3 Dichiarazione puntatori si usa il modificatore * prima del nome della variabile, es.: int *pa; /* pa è puntatore a int */ int **ppa; /* ppa è puntatore a puntatore a int */
4 Sintassi puntatori Sintassi di <decl> che tiene conto dei puntatori: <decl>::= <identifier> *<decl>...
5 Esercizio Costruire l albero sintattico di: int **ppx;
6 Operazioni aritmetiche Hanno senso incrementi e decrementi Il valore cambia di multipli del numero di byte necessari a rappresentare il tipo del puntatore: int *pint;... pint += 2; // aggiunge 2*sizeof(int) al valore di pint
7 Operatore dereferenziazione * applicato in forma prefissa ad un espressione che restituisce un valore di tipo puntatore, es.: int *pa; *pa = 12; /* assegna 12 alla variabile puntata da pa */
8 Sintassi dereferenziazione <var>::= <identifier> *<expr>... in cui <expr> restituisce un valore di tipo indirizzo di una variabile di un qualche tipo Quindi *pa =... è legale
9 Operatore di indirizzo L operatore & è all incirca l inverso di * <expr> ::=... &<var>... Γ( &<var> ) restituisce il valore dell indirizzo della variabile referenziata da <var>. Non ha side effects. &A =... non è legale (compara la sintassi con quella di *A)!
10 Puntatori a void Si possono dichiarare puntatori di tipo void, es.: void *ptr; int n; ptr = &n; il compilatore sa quanti byte servono per rappresentare un indirizzo: posso usare &...
11 Per dereferenziare un puntatore void devo fare un cast come farebbe il compilatore a sapere quanti byte leggere... void *ptr; int m,n; ptr = &n; m=*((int *)ptr);
12 Sintassi cast di puntatore <expr>::=... (<cast-type>) <expr1>... <cast-type> ::= <type> <casttype> *
13 Array Insieme di variabili, dello stesso tipo, che possono essere referenziate con un nome collettivo ed un indice che le distingue tra loro si estende <decl> <declaration>::=<type><decl>; <decl>::=<identifier> *<decl> <decl>[<const>] <type> <decl>[<const>];
14 Ordine di * e [] Il modificatore suffisso [<const>] ha priorità sul modificatore prefisso * float *X[128]; è un array di 128 puntatori a float
15 Interpretazione di dichiarazioni complesse Si parte dal nome della variabile nome = nome è un... Si legge verso destra finché ci sono modificatori suffissi [<const>] =...array di <const> variabili di tipo... Si legge verso sinistra fino ad arrivare al tipo elementare * =...puntatore ad una variabile di tipo...
16 Esempio float **XX[12][18]; XX è un - array di 12 variabili di tipo - array di 18 variabili di tipo - puntatore a variabile di tipo - puntatore a variabile di tipo - float XX è un array di 12 array di 18 puntatori a puntatori float
17 Scrivere dichiarazioni complesse Si segue la regola di lettura all inverso. Es.: dichiarare X come array di 18 puntatori a int: X... // X X[18]... // X è un array di *X[18]; // X è un array di 18 puntatori a int *X[18]; // X è un array di 18 puntatori a int
18 Estensione della sintassi La categoria <decl> usa le parentesi per forzare la priorità di * e [] <decl>::=... (<decl>)... La parentesi da la priorità ai modificatori interni: ora si può dichiarare un puntatore ad array!
19 Esempio int (* ptr)[128]; ptr è un - puntatore a - array di 128 variabili di tipo - int
20 Riferimento ad array Il nome associato ad una variabile array denota il valore (costante) dell indirizzo a partire dal quale l array è memorizzato il tipo di tale valore è quello di un puntatore a variabili del tipo di quelle raccolte nell array
21 Sintassi <var>::= <identifier> *<expr> <expr1>[<expr2>]... <expr1> restituisce un valore di tipo indirizzo <expr2> restituisce un valore di tipo intero
22 Semantica Se ptr e n sono i valori restituiti da <expr1> e <expr2>, e se t è il tipo di variabile puntata da ptr allora: <expr1>[<expr2>] denota una variabile di tipo t che si trova all indirizzo ptr+n, con + intesa con la semantica della somma dei puntatori <expr1>[<expr2>] == *(<expr1>+<expr2>)
23 Array multidimensionali Le variabili sono serializzate nell ordine riga colonna tipo C[X][Y]; [i][j] indica l elemento che si trova alla posizione i*y+j C[i][j] si trova nella locazione C+i*Y+j discende da sintassi e semantica (array di array)
24 Un array multidimensionale si riporta comunemente ad un array monodimensionale Esercizio: float A[X][Y][Z]; A[i][j][k] corrisponde all elemento...
25 Un array multidimensionale si riporta comunemente ad un array monodimensionale Esercizio: float A[X][Y][Z]; A[i][j][k] corrisponde all elemento... i*y + j*z + k
26 Allocazione dinamica la funzione di libreria malloc() richiede al S.O. l allocazione di un array di variabili char di dimensione determinata. Restituisce il puntatore (void) alla locazione di base dell array: #include <stdlib.h> void *malloc(size_t size);
27 Esempio float *A; A = (float *) malloc(20*sizeof(float)); sizeof(float) restituisce la dimensione di un float il cast a (float *) del puntatore restituito da malloc consente di usarlo con A
28 se il S.O. non ha a disposizione un segmento consecutivo di memoria sufficientemente grande malloc() fallisce riporta NULL definito come ((void *)0)
29 Puntatori e array: differenze float xa[128]; float *xp; xp = (float *) malloc(128*sizeof(float)); xa e xp restituiscono un valore di tipo indirizzo di float; xa è una costante, xp una variabile (può apparire a sinistra di =)
30 Deallocazione Quando la memoria allocata non serve più la si libera con la funzione di libreria free() Es.: int *C;... C=(int *)malloc( X*sizeof(int));... free(c);
31 Memory debugging Alcuni problemi: uso di indici oltre il limite dell array, mancate deallocazioni (memory leak), riuso di puntatori deallocati, uso di puntatori non inizializzati, buffer overflow... esistono librerie che aiutano ad identificare questi errori, es.: DMalloc, Vaglrind, ElectricFence, etc.
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
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
Allocazione Dinamica della Memoria
Allocazione Dinamica della Memoria Elisa Marengo Università degli Studi di Torino Dipartimento di Informatica Elisa Marengo (UNITO) Allocazione Dinamica della Memoria 1 / 10 Scelta delle variabili Quando
Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I
Lezione 4 Elementi lessicali e espressioni logiche Matricole 2-3 Elementi lessicali il linguaggio C ha un suo vocabolario di base i cui elementi sono detti token esistono 6 tipi di token: parole chiave
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
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
L Allocazione Dinamica della Memoria
L Allocazione Dinamica della Memoria Maurizio Palesi DIIT Università di Catania Viale Andrea Doria 6, 95125 Catania [email protected] http://www.diit.unict.it/users/mpalesi Sommario Questo documento
Le operazioni di allocazione e deallocazione sono a carico del sistema.
Allocazione della memoria In C++ è possibile creare (allocare) variabili in maniera statica o dinamica. Nell allocazione statica una variabile esiste ed è utilizzabile dal momento della sua dichiarazione
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
Array e puntatori in C
Array e puntatori in C Diapositive adattate dalle omonime create dalla Dottoressa di Ricerca Giovanna Melideo per il corso di Laboratorio di Algoritmi e Strutture Dati 10/05/2005 LP2-04/05 - Appunti di
Tipi di dati scalari (casting e puntatori) Alessandra Giordani Lunedì 10 maggio 2010
Tipi di dati scalari (casting e puntatori) Alessandra Giordani [email protected] Lunedì 10 maggio 2010 http://disi.unitn.it/~agiordani/ I tipi di dati scalari I tipi aritmetici, i tipi enumerativi
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
Lezione 10. L arte della programmazione
Lezione 10 Linguaggi di programmazione: il C Le variabili e le costanti L assegnazione Gli operatori La documentazione L input/output L arte della programmazione La soluzione di un problema tramite un
Il 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
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
Laboratorio di Algoritmi e Strutture Dati. La gestione della memoria dinamica Heap
Laboratorio di Algoritmi e Strutture Dati La gestione della memoria dinamica Heap Proff. Francesco Cutugno e Luigi Lamberti 2009 Cenni sui Processi Si definisce Programma un insieme di Istruzioni destinate
4 GLI ARRAY E LE STRINGHE
13 4 GLI ARRAY E LE STRINGHE 4.1 Gli array monodimensionali Un array è un insieme di variabili dello stesso tipo, cui si fa riferimento mediante uno stesso nome. L accesso ad un determinato elemento si
INFORMATICA - I puntatori Roberta Gerboni
1 2 I puntatori in C++ Il puntatore un tipo di dato scalare, che consente di rappresentare gli indirizzi delle variabili allocate in memoria. Dominio: Il dominio di una variabile di tipo puntatore è un
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));
Allocazione dinamica della memoria - riepilogo
Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica In breve Storage duration Allocazione dinamica della
Allocazione dinamica. VLA, malloc() e dintorni
Allocazione dinamica VLA, malloc() e dintorni Rappresentazione di sequenze... È molto comune dover rappresentare sequenze di elementi tutti dello stesso tipo e fare operazioni su di esse: Es: sequenza
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
puntatori Lab. Calc. AA 2007/08 1
puntatori Lab. Calc. AA 2007/08 1 parametri delle funzioni (dalla lezione scorsa) gli argomenti in C vengono passati by value dalla funzione chiamante alla funzione chiamata la lista degli argomenti viene
Variabili. Unità 2. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER
Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER Domenico Daniele Bloisi Docenti Metodi Numerici prof. Vittoria Bruni [email protected] Programmazione prof. Domenico
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
Caratteri e stringhe
Caratteri e stringhe Caratteri Dato che un computer può memorizzare esclusivamente sequenze di bit, per memorizzare un carattere (e quindi testi) è necessario stabilire una convenzione che associa a un
stringhe array monodimensionali char. libreria < string.h>
Le stringhe Le stringhe sono array monodimensionali il cui tipo base è char. Il nucleo del linguaggio non prevede particolari istruzioni per il trattamento delle stringhe che potrebbero essere gestite
Struttura dei programmi C
Programmi C Struttura dei Programmi C Dichiarazione delle variabili Operazioni di Ingresso/Uscita Fondamenti di Informatica 1 Struttura dei programmi C Un programma C deve contenere, nell'ordine: una parte
Lezione 9: Strutture e allocazione dinamica della memoria
Lezione 9: Strutture e allocazione dinamica della memoria Laboratorio di Elementi di Architettura e Sistemi Operativi 9 Maggio 2012 Allocazione dinamica della memoria Memoria dinamica È possibile creare
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
L intero è o il valore zero o una stringa di cifre che inizia con una cifra diversa sa zero.
ANALISI SINTATTICA Data un linguaggio scrivere una grammatica che lo generi ESERCIZIO 1 Definire una grammatica per il linguaggio L = {ww w appartiene a (a, b)*} ESERCIZIO 2 Dato l alfabeto T=[0,1,2,3,4,5,6,7,8,9,/}
Unità Didattica 1 Linguaggio C. Fondamenti. Struttura di un programma.
Unità Didattica 1 Linguaggio C Fondamenti. Struttura di un programma. 1 La storia del Linguaggio C UNIX (1969) - DEC PDP-7 Assembly Language BCPL - un OS facilmente accessibile che fornisce potenti strumenti
Istruzioni iterative (o cicliche)
Dipartimento di Informatica e Sistemistica Antonio Ruberti Sapienza Università di Roma Istruzioni iterative (o cicliche) Corso di Fondamenti di Informatica Laurea in Ingegneria Informatica (Canale di Ingegneria
Programmazione in Java (I modulo)
Programmazione in Java (I modulo) Lezione 4 Variabili di tipo primitivo. Dichiarazione di costanti Conversioni di tipo: operatore cast Altri operatori di assegnamento Operazioni aritmetiche e di confronto
Espressioni ed operatori in C
Espressioni ed operatori in C Espressioni Il C è un linguaggio basato su espressioni Una espressione è una notazione che denota un valore mediante un processo di valutazione Una espressione può essere
Introduzione al Linguaggio C
INFORMATICA 1 Lezione 3 (Introduzione al Linguaggio C, Introduzione ai Tipi di dato, Cenni alla codifica binaria) Introduzione al Linguaggio C 1 Passi fondamentali del C Definito nel 1972 (AT&T Bell Labs)
IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale
Fondamenti di Informatica IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale Fondamenti di Informatica - D. Talia - UNICAL 1 Lettura di dati da input In Java la lettura di dati da input
I puntatori e l allocazione dinamica di memoria
I puntatori e l allocazione dinamica di memoria L allocazione delle variabili Allocazione e rilascio espliciti di memoria Le funzioni malloc e free 2 2006 Politecnico di Torino 1 Allocare = collocare in
Esercizi Programmazione I
Esercizi Programmazione I 9 Novembre 201 Esercizio 1 Valutare e dare il tipo delle seguenti espressioni condizionali. 1 char a= a, b= b ; // a ha v a l o r e decimale 97 2 i n t i= 1, j= 2 ; 3 double x=
La programmazione nel linguaggio C
3 La programmazione nel linguaggio C 3.0 La programmazione nel linguaggio C c Diego Calvanese Fondamenti di Informatica Corso di Laurea in Ingegneria Elettronica A.A. 2001/2002 3.0 0 Introduzione ai programmi
Informatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1
Informatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1 Cosa è il C++ E un linguaggio di programmazione derivato dal C Può essere usato per modificare il SO Unix e i suoi derivati (Linux)
Problema. Vettori e matrici. Vettori. Vettori
e matrici Ver. 2.4 2010 - Claudio Fornaro - Corso di programmazione in C Problema Si vuole un programma che chieda 10 numeri dalla tastiera e li visualizzi dall ultimo al primo Soluzione attuale (con le
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
Introduzione al linguaggio C Gli array
Introduzione al linguaggio C Gli array Vettori nome del vettore (tutti gli elementi hanno lo stesso nome, c) Vettore (Array) Gruppo di posizioni (o locazioni di memoria) consecutive Hanno lo stesso nome
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
Linguaggio C - Puntatori
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
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
Strutture dati e loro organizzazione. Gabriella Trucco
Strutture dati e loro organizzazione Gabriella Trucco Introduzione I linguaggi di programmazione di alto livello consentono di far riferimento a posizioni nella memoria principale tramite nomi descrittivi
