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

Slides:



Advertisements
Presentazioni simili
File Linguaggio C.
Advertisements

Puntatori Linguaggio C.
Introduzione al linguaggio C++
Corso di Fondamenti di Programmazione canale E-O
INFORMATICA Altre Istruzioni di I/O
LINGUAGGIO DI PROGRAMMAZIONE C
Uso avanzato di C.
Nel C non esiste un dato primario di tipo stringa; queste sono rappresentate con un array monodimensionale di caratteri (tipo char). Così per definire.
Preincremento e PostIncremento in C++
Introduzione al linguaggio C
Puntatori in C e C++.
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità F2 Selezione.
Sviluppo di programmi strutturati
PUNTATORI Introduzione
Introduzione al linguaggio C Dr. Francesco Fabozzi Corso di Informatica.
La ricorsione Simulazione. Il Main /* Programma che usa una funzione ricorsiva*/ #include #define MAX_N 8 main() int valore, dato; printf(Introduci n:
ESERCITAZIONE N. 5 ESERCIZIO N. 1 Autore: Biagio Brattoli S I Corso.
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Caratteri e stringhe di caratteri
Argomenti dalla linea dei comandi Gli argomenti possono essere passati a qualsiasi funzione di un programma, compresa la main(), direttamente dalla linea.
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di Programmazione a.a.2009/2010 Prof.ssa Chiara Petrioli Corso.
Laboratorio di Linguaggi lezione IX: tipi ricorsivi Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
Esercizio: Copiare un file in un nuovo file mediante le funzioni read e write.
Struct, enum, Puntatori e Array dinamici
Strutture di controllo nel C
Esercizi FUNZIONI Passaggio di parametri per valore, variabili e tipi locali e globali, prototipo.
Esercizi C sui tipi definiti dall’utente
Politecnico di Milano Esercizi Stringhe Ricerca binaria.
Esercizi Puntatori, struct con campi puntatore, puntatori a struct, rapporto tra array e puntatori. FUNZIONI Passaggio di parametri per indirizzo, passaggio.
Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.
File di testo, file binari
Esercizi C su array e matrici
Le liste dinamiche La ricorsione
I File.
Il Linguaggio C.
Le funzioni.
Algoritmi e Programmazione Avanzata
PUNTATORI Un puntatore è una variabile destinata a contenere lindirizzo di unaltra variabile Vincolo di tipo: un puntatore a T può contenere solo lindirizzo.
TIPI DI DATO Un tipo di dato T è definito come: un dominio di valori, D un insieme di funzioni F 1,..,F n sul dominio D un insieme di predicati P 1,..,P.
2000 Prentice Hall, Inc. All rights reserved. Capitolo 10 (Deitel) Strutture, unioni ed enumerazioni Sommario Introduzione Definire le strutture.
In molti casi è utile assegnare a degli identificatori dei valori che restino costanti durante tutto il programma e che non possano essere cambiati nemmeno.
void binario(int n); …………………
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
Puntatori e gestione dinamica della memoria
Unità Didattica 3 Linguaggio C
Passaggio di parametri per indirizzo
Esercizi su File.
Gestione dei file di testo, matrici e struct
Corso di Programmazione Grafica e Laboratorio Daniele Marini
1 Esempi domande di esame. 2 Dato il seguente programma #include int main(){ int *p,j=9,i=5; p=&j; *p=i; printf("%d %d %d\n", i,j,*p); scanf("%d",p);/*
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
ALGORITMI Un algoritmo è un insieme di istruzioni: -ordinate -non ambigue -effettivamente computabili.
#include void main() { int a,b,c,; float s, x,x1,x2,delta,alfa,beta; int num[3]; int i; printf("La forma classica dell'equazione di 2° grado è: a*x^2+b*x+c=0\n.
Vettori, indirizzi e puntatori Finora abbiamo usato gli indirizzi nel chiamare  la funzione scanf()  le altre funzioni per riferimento Tuttavia la vera.
Informatica B Allievi Elettrici - AA Fondamenti della programmazione in linguaggio C (II) Istruzioni e strutture di controllo.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
1 Il linguaggio C Puntatori e dintorni. 2 Puntatori : idea di base In C è possibile conoscere e denotare l’indirizzo della cella di memoria in cui è memorizzata.
Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 1 Lezione 13 e 14 GESTIONE DEI FILE A) Nozioni sulla gestione dei.
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Operatori di incremento e decremento
Informatica B Allievi Elettrici - AA Fondamenti della programmazione in linguaggio C (III)
Fondamenti di Informatica L- A AdrianAilincai MarcoAlbergamo LeonardoAmico MassimilianoArpino ValerioZerillo
Capitolo 14 Diapositiva 1 Linguaggio C – Guida alla programmazione 2/ed – A. Bellini, A. Guidi Copyright © The McGraw-Hill Companies srl Archiviare.
Il C `e un linguaggio di programmazione di uso generale, originariamente sviluppato per la scrittura del sistema operativo Unix, ed oggi disponibile su.
Linguaggio C: Funzioni e Puntatori Laboratorio di Programmazione Gruppo 1.
Introduzione al linguaggio C
Programmazione e Laboratorio di Programmazione
Transcript della presentazione:

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

Tipi Puntatori #include <stdio.h> int nNumber; NULL int *pPointer; main() { nNumber = 15; pPointer = &nNumber; printf( "nNumber is equal to : %d \n ",nNumber); *pPointer = 25; printf("nNumber is equal to: %d \n ",nNumber); } NULL

Tipi Puntatori #include<stdio.h> int n; int *p; main() { n=4; printf("\nContenuto di n = %d ",n); printf("\nIndirizzo di n = %p ",&n); p=&n; printf("\nContenuto di p = %p ",p); printf("\nIndirizzo di p = %p ",&p); *p=3; getchar(); } 1 byte n p 00404070 00404060 NULL 1 byte n p 00404070 00404060 4->3 00404070

Tipi Puntatori int x=-57, y=25; int *p; main() { p=&y; x=*p; } NULL 0040AB00 0040AB04 p 0040AB08 -57 25 4 byte int x=-57, y=25; int *p; main() { p=&y; x=*p; } NULL

Tipi Puntatori e Struct struct elemento { char cognome[15]; unsigned short eta; } x, *p; p=&x *p corrisponde a x, all’intero struct (*p).cognome corrisponde a x.cognome (*p).eta corrisponde a x.eta la parentesi è necessaria a causa della priorità l’operatore -> può essere usato in alternativa (*p).cognome equivale a p->cognome (*p).eta equivale a p->eta

Tipi Puntatori e Struct struct elemento { char cognome[15]; unsigned short eta; } x, *p; main() { p=&x; gets(x.cognome); gets(p->cognome); scanf("%u",&p->eta); flush(); scanf("%u",&(x.eta)); printf("\n%s",p->cognome); printf("\n%s",x.cognome); printf("\n%u",p->eta); printf("\n%u",x.eta); getchar(); }

Aritmetica dei Puntatori Incremento/Decremento di una variabile puntatore è legato alla dimensione della variabile puntata p++, p si incrementa di un numero di byte pari alla dimensione della variabile a cui punta p--, p si decrementa di un numero di byte pari alla dimensione della variabile a cui punta

Aritmetica dei Puntatori #include<stdio.h> int x=-57, y=25; int *p; main() { printf("\n&x=%p ",&x); printf("\n&y=%p ",&y); p=&x; printf("\nContenuto di p=%p ",p); p++; getchar(); } 00402000 00402004 00402000 00402004

Puntatori e Vettore Il nome della variabile vettore è l’indirizzo del primo elemento del vettore: int v[10]; v corrisponde a &v[0] v+i corrisponde a &v[i] (aritmetica dei puntatori!) v[i] corrisponde a *(v+i) scanf(“%d”,&v[i]) corrisponde a scanf(“%d”,v+i); printf(“%d”,v[i]) corrisponde a printf(“%d”,*(v+i));

Puntatori e Vettore #include<stdio.h> #define N 10 int vettore[N], i; main() { for (i=0; i<N; i++) scanf(“%d”,&v[i]); scanf(“%d”,v+i); getchar(); } Equivalente!

Allocazione di Memoria in C #include<stdlib.h> variabile puntatore= (cast) malloc (dimensione in byte); free (variabile puntatore); Da non dimenticare !!!!!! Si noti che la funzione free(), disalloca l'area puntata dal puntatore, ma non annulla il puntatore, ossia esso non viene posto a NULL, ma viene lasciato al valore attuale.

Allocazione di Memoria in C Heap Stack Area Statica Area Programma Area Dati

Allocazione di Memoria in C Heap Stack NULL Area Programma Area Dati pPointer Area Statica 0050AB00 25 #include <stdio.h> #include<stdlib.h> int *pPointer; main() { pPointer = (int *) malloc(sizeof(int)); *pPointer = 25; free (pPointer); }

Allocazione di Memoria in C Allocazione di un vettore Heap Stack NULL Area Programma Area Dati v Area Statica n 0050AB00 10 10*sizeof(float) #include<stdio.h> #include<stdlib.h> float *v; unsigned int n; main() { printf ("Inserisi il valore di n "); scanf("%u",&n); flush(); v=(float *)malloc(n*sizeof(float)); free(v); getchar(); }

Passaggio Parametri & - x 4 y 5 a b tmp #include <stdio.h> Return Address - x y 4 5 Record di Attivazione del main Link Dinamico a b Record di Attivazione della Procedura scambia tmp #include <stdio.h> void scambia ( int , int ); main(){ int x=4, y=5; scambia(x,y); printf("%d %d \n", x, y); } void scambia ( int a, int b){ int tmp=a; a=b; b=tmp;

Passaggio Parametri & x y   a b tmp #include <stdio.h> void scambia ( int *, int *); main(){ int x=4,y=5; scambia(&x,&y); printf("%d %d \n",x,y); } void scambia ( int *a, int *b) { int tmp=*a; *a=*b; *b=tmp; Return Address - x y   Record di Attivazione del Main Link Dinamico a b 4 5 Record di Attivazione della Procedura Scambia tmp

Passaggio Parametri & #define C 20 struct persona { char cognome[C], nome[C]; } ; void LeggiPersona(struct persona * ); main(){ struct persona elem; LeggiPersona(&elem); } void LeggiPersona(struct persona * p){ printf("\nInserisci il Cognome "); LeggiStringa(p->cognome,C); printf("\nInserisci il Nome "); LeggiStringa(p->nome,C);