Array e puntatori in C

Размер: px
Начинать показ со страницы:

Download "Array e puntatori in C"

Транскрипт

1 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 C 1

2 Array Sono delle collezioni di variabili tutte dello stesso tipo, individuate da un nome comune, e da una dimensione (nel caso degli array, o vettori) o da una n- pla di dimensione (nel caso di array multi-dimensionali). Le dimensioni vengono indicate racchiudendole fra parentesi quadre. Quando si dichiara una matrice ènecessario indicarne tutte le dimensioni. Forma generale: <tipo elem.> <nome>[<dimensione_1>] [<dimensione_n>] 10/05/2005 LP2-04/05 - Appunti di C 2

3 Array Esempi: 1.int v[4]; /* dichiarazione array di dim. 4 */ 2.char V[2][3]; /* dichiarazione matrice bidimensionale */ Ogni variabile è accessibile tramite il nome, comune a tutte, specificandone la posizione: l indice del vettore, da 0 alla dimensione -1 n indici, da 0 alla dimensione_i -1, nel caso di array n-dimensionali Esempi: 1.V[0],, V[3] 2.V[0][0], v[0][2], V[1,2] 10/05/2005 LP2-04/05 - Appunti di C 3

4 Array Inizializzazione in fase di dichiarazione int vettore[3]={0,1,2}; char s[]={ a, b, \0 }; char s[]= ab ; double V[][3] = {{3,2,0}{4,5,9}}; Quando l elenco di inizializzatori èpiù breve della dimensione i restanti elementi vengono inizializzati a zero Se si omette la dimensione, allora viene assegnato il numero di valori di inizializzazione 10/05/2005 LP2-04/05 - Appunti di C 4

5 Array e puntatori q È importante sapere come vengono memorizzate le matrici sulla macchina per poterle usare correttamente sfruttando a fondo le caratteristiche del C: Gli array vengono memorizzati in locazioni di memoria contigue. sia A un array di interi (supponiamo che ogni intero occupi 2 byte): se l elemento A[0] viene memorizzato a partire dalla locazione di memoria 1000, allora l elemento A[1] sarà memorizzato a partire dall indirizzo 1002, A[2] all indirizzo 1004, ecc. Le matrici sono considerate array di array. Vengono memorizzate disponendo le righe (che sono array e quindi memorizzati su locazioni di memoria contigue) una di seguito all altra. se M è una matrice di 4 righe e 3 colonne di interi (int M[4][3];) ogni elemento occuperà 2 byte di memoria. Se M[0][0] viene allocato nella posizione 5000, allora M[0][1] sarà allocato nella posizione 5002, M[0][2] nella posizione M[1][0] (il primo elemento della seconda riga) sarà memorizzato nella locazione successiva a quelle occupate dall ultimo elemento della riga precedente (M[0][2]): la locazione = /05/2005 LP2-04/05 - Appunti di C 5

6 Array e puntatori Se M è una matrice di n righe ed m colonne, la formula per individuare la locazione di memoria dell elemento M[i][j] (di qualunque tipo sia la matrice) è la seguente: &M[0][0]+i*m+j l indirizzo di memoria del primo elemento, più i volte il numero di elementi presenti su ogni riga, più j Le operazioni aritmetiche sui puntatori tengono conto del tipo di dato a cui punta la variabile. Esempio: se A è una variabile intera memorizzata a partire dalla locazione di memoria 2000, e PA è un puntatore ad A ( PA = &A; ), allora PA+1 punterà alla locazione di memoria 2002 (e non a 2001). 10/05/2005 LP2-04/05 - Appunti di C 6

7 Gli array ed i puntatori hanno dunque una strettissima parentela in C: nella rappresentazione interna di array e matrici, il compilatore infatti si riconduce sempre ad una notazione che fa uso di puntatori, anche dove nel programma era stato fatto uso di una notazione con indici. L uso dei puntatori al posto degli indici rende il programma più efficiente. Il nome di un array èun puntatore costante al primo elemento di un array: arr == & arr[0] Si ha un equivalenza d uso e di notazione Array e puntatori 10/05/2005 LP2-04/05 - Appunti di C 7

8 Array e puntatori Sia arr il nome di un array di elementi di tipo T e ptr un puntatore a elementi di tipo T: ptr=&arr[0]; èequivalente a ptr=arr; dopo aver posto ptr=arr; posso accedere all elemento i di un array nei seguenti modi, tutti equivalenti: ptr[i], *(arr+i), arr[i], *(p+i) l indirizzo dell elemento di indice i si può ottere come: &arr[i], arr+i 10/05/2005 LP2-04/05 - Appunti di C 8

9 Array e puntatori Tuttavia un puntatore è una variabile ma il nome di un array è costante. Ne segue che: ptr++ e ptr=arr sono espressioni valide ma arr++ e arr=ptr non sono valide. 10/05/2005 LP2-04/05 - Appunti di C 9

10 Aritmetica degli indirizzi Se p1 e p2 sono puntatori ad elementi dello stesso array o al primo elemento oltre la fine di un array, gli operatori di confronto (==,!=, <, >=,<=, >) funzionano correttamente Inoltre se p1 < p2, allora p2-p1+1 è il numero di elementi da p1 a p2, estremi inclusi Ogni puntatore può essere confrontato con 0 per stabilire se è valido o meno Esercizio: trovare il valore massimo tra gli elementi di un array di interi compresi tra il primo e il primo elemento di valore 5 10/05/2005 LP2-04/05 - Appunti di C 10

11 Array come parametri di funzioni Poiché il nome dell array è un puntatore al primo elemento, passarlo come argomento ad una funzione equivale a passare un puntatore al primo elemento dell array Se alla funzione chiamata serve conoscere la dimensione, essa deve essere passata come parametro separato double somma(double a[], int n) { /* n èla dimensione di a[] */ int i; double s=0; for (i=0; i<n; ++i) s=s+a[i]; return s; } equivale a double somma(double *a, int n); se vèun array di double, possibili chiamate sono: somma(&v[0],88); somma(v,88); somma(&v[i],5); somma(v+i,5); 10/05/2005 LP2-04/05 - Appunti di C 11

12 Array come parametri di funzioni La copia è sempre per valore e all interno della funzione chiamata il parametro è assegnato a una variabile locale C è coerenza con il passaggio di parametri in C Tuttavia l effetto è di passare alla funzione l indirizzo di un array esterno alla funzione stessa Se la funzione modifica l array, modifica l array esterno non una copia locale Ciò è auspicabile per ragioni di efficienza in quanto la creazione di una copia locale è un operazione che richiede del tempo In altri linguaggi, meno efficienti, è possibile la copia per valore dell array 10/05/2005 LP2-04/05 - Appunti di C 12

13 Array come parametri di funzioni Naturalmente è possibile anche in C usare una copia locale, ma la copia deve essere inizializzata esplicitamente: double lavora_su_copia(double a[], int n) { int i; double s=0, copia_array[n]; /* SOLO in C99 */ for (i=0; i<n; ++i) copia_array[i]=a[i]; } In C89 si deve dichiarare copia_array[n] dove N è una costante e si deve essere certi che N sia maggiore di ogni possibile valore di n 10/05/2005 LP2-04/05 - Appunti di C 13

14 Array come parametri di funzioni E possibile passare come parametro un sotto-vettore double f(double a[ ]) { } /* o anche double f(double *a) { }*/ Nel chiamante, se lavoro èun array di elemnti double, si può chiamare f con il sotto-vettore che inizia a partire dall elemento k: sum = f ( lavoro + k); /* o anche sum = f ( & lavoro[ k ]); */ Se si è certi che un vettore è in realtà un sotto-vettore, si può accedere a elementi esterni al sotto-vettore ma contenuti nel vettore utilizzando indici negativi a[ -1 ] /* accede all elemento che precede il primo elemento del sotto-vettore */ 10/05/2005 LP2-04/05 - Appunti di C 14

15 void scambia(int *,int *); Ordinamento di valori: Bubble-sort void bubble (int a[], int n) { int i,j; for(i=0; i<n-1; ++i) for (j=n-1; j>i; --j) if (a[j-1]>a[j]) scambia(&a[j-1], &a[j]); /* scambia(a+j-1, a+j); */ } void scambia(int *x, int *y) { int app; app = *x; *x = *y; *y = app; return; } 10/05/2005 LP2-04/05 - Appunti di C 15

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;

Подробнее

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

Подробнее

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;

Подробнее

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

Подробнее

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

Подробнее

4 GLI ARRAY E LE STRINGHE

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

Подробнее

Problema. Vettori e matrici. Vettori. Vettori

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

Подробнее

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 - [email protected] A pessimistic programmer sees the array as half empty.

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

Esercizi C su array e matrici

Esercizi C su array e matrici Politecnico di Milano Esercizi C su array e matrici Massimo, media e varianza,, ordinamento, ricerca e merge, matrice simmetrica, puntatori Array Array o vettore Composto da una serie di celle int vett[4]

Подробнее

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

Подробнее

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

Подробнее

Programmazione I - Laboratorio

Programmazione I - Laboratorio Programmazione I - Laboratorio Esercitazione 3 - Array Gianluca Mezzetti 1 Paolo Milazzo 2 1. Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ mezzetti mezzetti di.unipi.it 2. Dipartimento

Подробнее

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

Подробнее

Lezione 21 e 22. Valentina Ciriani ( ) Laboratorio di programmazione. Laboratorio di programmazione. Lezione 21 e 22

Lezione 21 e 22. Valentina Ciriani ( ) Laboratorio di programmazione. Laboratorio di programmazione. Lezione 21 e 22 Lezione 21 e 22 - Allocazione dinamica delle matrici - Generazione di numeri pseudocasuali - Funzioni per misurare il tempo - Parametri del main - Classificazione delle variabili Valentina Ciriani (2005-2008)

Подробнее

Programmazione I - Laboratorio

Programmazione I - Laboratorio Programmazione I - Laboratorio Esercitazione 4 - Puntatori, vettori e stringhe Gianluca Mezzetti 1 Paolo Milazzo 2 1. Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ mezzetti mezzetti

Подробнее

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 [email protected] http://www.diit.unict.it/users/mpalesi Sommario Questo documento

Подробнее

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

Подробнее

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

Подробнее

Cenni sul linguaggio C

Cenni sul linguaggio C UNIVERSITÀ DI ROMA TRE - FACOLTÀ DI SCIENZE M.F.N. - CORSO DI LAUREA IN MATEMATICA Cenni sul linguaggio C Marco Liverani [email protected] Roma, 7 Febbraio 1999 Sommario Caratteristiche del linguaggio

Подробнее

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

Подробнее

Esercizi Programmazione I

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=

Подробнее

Cicli annidati ed Array multidimensionali

Cicli annidati ed Array multidimensionali Linguaggio C Cicli annidati ed Array multidimensionali Cicli Annidati In C abbiamo 3 tipi di cicli: while(exp) { do { while(exp); for(exp;exp;exp3) { Cicli annidati: un ciclo all interno del corpo di un

Подробнее

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

Подробнее

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

Подробнее

Introduzione a Matlab

Introduzione a Matlab INFORMATICA B Ingegneria Elettrica Introduzione a Matlab Introduzione a Matlab Matlab (MATrix LABoratory) è uno strumento per il calcolo scientifico ed ingegneristico Matlab facilita lo sviluppo di programmi

Подробнее

Allocazione Dinamica della Memoria

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

Подробнее

Costanti e Variabili

Costanti 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

Подробнее

Caratteri e stringhe

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

Подробнее

Dati aggregati. Violetta Lonati

Dati aggregati. Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica - in breve: Definizione di tipi Array Stringhe Strutture

Подробнее

Vettori Algoritmi elementari di ordinamento

Vettori Algoritmi elementari di ordinamento Dipartimento di Informatica e Sistemistica Antonio Ruberti Sapienza Università di Roma Vettori Algoritmi elementari di ordinamento Corso di Fondamenti di Informatica Laurea in Ingegneria Informatica (Canale

Подробнее

Multidimensionali. Array Multidimensionali. Tipi di array. Matrice: array bidimensionale. Array multidimensionale. Dichiarazione di una matrice

Multidimensionali. Array Multidimensionali. Tipi di array. Matrice: array bidimensionale. Array multidimensionale. Dichiarazione di una matrice Tipi di array Array Multidimensionali Antonella Santone Monodimensionali (vettore) Multidimensionali Array multidimensionale Un array multidimensionale è un array, i cui elementi sono a loro volta degli

Подробнее

Esercizio 2: Algebra dei Puntatori e Puntatori a Puntatori

Esercizio 2: Algebra dei Puntatori e Puntatori a Puntatori Esercizio 2: Algebra dei Puntatori e Puntatori a Puntatori Salvatore Mandrà 7 Ottobre 2008 1 Esercizio L esercizio prevede l implementazione di funzioni per il prodotto di una matrice per un vettore, attraverso

Подробнее

Matrici. Matrici.h Definizione dei tipi. Un po di esercizi sulle matrici Semplici. Media difficoltà. Difficili

Matrici. Matrici.h Definizione dei tipi. Un po di esercizi sulle matrici Semplici. Media difficoltà. Difficili Matrici Un po di esercizi sulle matrici Semplici Lettura e scrittura Calcolo della trasposta Media difficoltà Calcolo del determinante Difficili Soluzione di sistemi lineari È veramente difficile? 1 Matrici.h

Подробнее

Lezione 8 Struct e qsort

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

Подробнее

I puntatori e l allocazione dinamica di memoria. Esercizi risolti

I puntatori e l allocazione dinamica di memoria. Esercizi risolti I puntatori e l allocazione dinamica di memoria Esercizi risolti 1 Esercizio Si vuole realizzare un tipo struct, utilizzato per informazioni su operazioni di vendita, avente i seguenti campi: codice: numero

Подробнее

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni Esercizio 1 Dire quale è la complessità temporale del seguente metodo, espressa con notazione asintotica O(.) (con la migliore

Подробнее

Informatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1

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)

Подробнее

Strutture dati e loro organizzazione. Gabriella Trucco

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

Подробнее

Il linguaggio C Il linguaggio C. Caratteristiche del C. Caratteristiche del C. Linguaggi di Programmazione I. Ferdinando Cicalese

Il linguaggio C Il linguaggio C. Caratteristiche del C. Caratteristiche del C. Linguaggi di Programmazione I. Ferdinando Cicalese 03-10-2003 Il linguaggio C Linguaggio general-purpose Il linguaggio C Creato nel 1972 nei Bell Labs da Dennis Ritchie su PDP11 Usato per il Sistema Operativo Unix da Ken Thompson Negli anni 80 nasce ANSI

Подробнее