Array e puntatori in C
|
|
|
- Niccoletta Bondi
- 9 anni fa
- Просмотров:
Транскрипт
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. 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
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 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 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 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
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
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
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 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 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
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
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
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
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 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 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. 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 - 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 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 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 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
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
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 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 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
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 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...... L operatore & fornisce l indirizzo di un oggetto: p = &c; assegna a p l indirizzo di c, i.e., p
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 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
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 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
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
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
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 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 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 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 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 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 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 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
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
