Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


puntatori 07 informatica.pdf, Schemi e mappe concettuali di Informatica

puntatori informatica siummmmm

Tipologia: Schemi e mappe concettuali

2021/2022

Caricato il 07/11/2022

loloo-lpal
loloo-lpal 🇮🇹

4 documenti

1 / 47

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
Fondamenti di Informatica T
Linguaggio C:
i puntatori
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f

Anteprima parziale del testo

Scarica puntatori 07 informatica.pdf e più Schemi e mappe concettuali in PDF di Informatica solo su Docsity!

Linguaggio C:

i puntatori

Il puntatore

E` 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

insieme di indirizzi: il valore di una variabile P di

tipo puntatore puo` essere l’indirizzo di un’altra

variabile (variabile puntata ). puntatore indirizzo di .. variabile puntata V P

Il puntatore in C

Operatori :

  • Assegnamento (=) : e` possibile l'assegnamento tra puntatori (dello stesso tipo). E' disponibile la costante NULL, per indicare l'indirizzo nullo.
  • *Dereferencing ( ) : è un operatore unario. Si applica a un puntatore e restituisce il valore contenuto nella cella puntata => serve per accedere alla variabile puntata.
  • Operatori aritmetici (vedi vettori & puntatori).
  • Operatori relazionali :>,<,==, !=
  • [Operatore indirizzo: si applica ad una variabile e restituisce l'indirizzo della cella di memoria nella quale eallocata la variabile.] **Ad esempio: int *p1, *p2; int A; p1 = &A; *p1 = 127; p2 = p1; p1 = NULL;/* NULL e la costante che denota il** *puntatore nullo / A p p

Il puntatore in C

Operatori :

  • Assegnamento (=) : e` possibile l'assegnamento tra puntatori (dello stesso tipo). E' disponibile la costante NULL, per indicare l'indirizzo nullo.
  • *Dereferencing ( ) : è un operatore unario. Si applica a un puntatore e restituisce il valore contenuto nella cella puntata => serve per accedere alla variabile puntata.
  • Operatori aritmetici (vedi vettori & puntatori).
  • Operatori relazionali :>,<,==, !=
  • [Operatore indirizzo: si applica ad una variabile e restituisce l'indirizzo della cella di memoria nella quale e` allocata la variabile.] **Ad esempio: int *p1, p2; int A; p1 = &A; p1 = 127; p2 = p1; p1 = NULL; A p p

Il puntatore in C

Operatori :

  • Assegnamento (=) : e` possibile l'assegnamento tra puntatori (dello stesso tipo). E' disponibile la costante NULL, per indicare l'indirizzo nullo.
  • *Dereferencing ( ) : è un operatore unario. Si applica a un puntatore e restituisce il valore contenuto nella cella puntata => serve per accedere alla variabile puntata.
  • Operatori aritmetici (vedi vettori & puntatori).
  • Operatori relazionali :>,<,==, !=
  • [Operatore indirizzo: si applica ad una variabile e restituisce l'indirizzo della cella di memoria nella quale e` allocata la variabile.] **Ad esempio: int *p1, p2; int A; p1 = &A; p1 = 127; p2 = p1; p1 = NULL; A p p 127

Il puntatore in C

Operatori :

  • Assegnamento (=) : e` possibile l'assegnamento tra puntatori (dello stesso tipo). E' disponibile la costante NULL, per indicare l'indirizzo nullo.
  • *Dereferencing ( ) : è un operatore unario. Si applica a un puntatore e restituisce il valore contenuto nella cella puntata => serve per accedere alla variabile puntata.
  • Operatori aritmetici (vedi vettori & puntatori).
  • Operatori relazionali :>,<,==, !=
  • [Operatore indirizzo: si applica ad una variabile e restituisce l'indirizzo della cella di memoria nella quale e` allocata la variabile.] **Ad esempio: int *p1, p2; int A; p1 = &A; p1 = 127; p2 = p1; p1 = NULL; A p p 127

Il puntatore in C: * e &

Operatore Indirizzo &:

  • & si applica solo ad oggetti che esistono in memoria (quindi, gia` definiti).
  • & non e` applicabile ad espressioni. *Operatore Dereferencing :
  • consente di accedere ad una variabile specificandone l'indirizzo
  • l'indirizzo rappresenta un modo alternativo al nome ( alias ) per accedere e manipolare la variabile: Ad esempio: float p; float R, A; p=&A; / p è un alias di A/ R=2; p=3.14R; / A è modificato / A p R

Il puntatore in C: * e &

Operatore Indirizzo &:

  • & si applica solo ad oggetti che esistono in memoria (quindi, gia` definiti).
  • & non e` applicabile ad espressioni. *Operatore Dereferencing :
  • consente di accedere ad una variabile specificandone l'indirizzo
  • l'indirizzo rappresenta un modo alternativo al nome ( alias ) per accedere e manipolare la variabile: Ad esempio: float p; float R, A; p=&A; / p è un alias di A/ R=2; p=3.14R; / A è modificato / A p 2 R

Puntatore come costruttore di tipo

Il costruttore di tipo "*" puo` essere anche usato per dichiarare tipi non primitivi basati sul puntatore. *Dichiarazione di un tipo puntatore: typedef ;

  • e` il tipo della variabile puntata
  • e` il nome del tipo dichiarato. **Ad esempio: typedef float tpf; tpf p; float f; p=&f; p=0.56;

Puntatori: controlli di tipo

Nella definizione di un puntatore e**necessario** indicare il tipo della variabile puntata.  il compilatore **puo** effettuare controlli statici sull'uso dei puntatori. Esempio: typedef struct{int campo1; float campo2;}record; int p, A; record q, X; p=&A; q=p; /warning!/ q=&X; p=q; / errore! /  Viene segnalato dal compilatore ( warning ) il tentativo di utilizzo congiunto di puntatori a tipi differenti.

Variabili Dinamiche

Variabili dinamiche:

  • Le variabili dinamiche devono essere allocate e deallocate

esplicitamente dal programmatore.

  • L'area di memoria in cui vengono allocate le variabili dinamiche

si chiama heap.

  • Le variabili dinamiche non hanno un identificatore , ma possono essere riferite soltanto attraverso il loro indirizzo (mediante i

puntatori ).

  • Il tempo di vita delle variabili dinamiche e` l'intervallo di tempo che intercorre tra l'allocazione e la deallocazione (che sono impartite esplicitamente dal programmatore).

Variabili Dinamiche in C

Il C prevede funzioni standard di allocazione e deallocazione per variabili dinamiche:

  • Allocazione: malloc
  • Deallocazione: free malloc e free sono definite a livello di sistema operativo, mediante la libreria standard <stdlib.h> ( da includere nei programmi che le usano).

Variabili Dinamiche

Allocazione di variabili dinamiche: La memoria dinamica viene allocata con la funzione standard malloc. La sintassi da usare e`: *punt = (tipodato )malloc(sizeof(tipodato)); dove:

  • tipodato e` il tipo della variabile puntata
  • punt e` una variabile di tipo **tipodato ***
  • sizeof() e` una funzione standard che calcola il numero di bytes che occupa il dato specificato come argomento
  • e` necessario convertire esplicitamente il tipo del valore ritornato ( casting): *(tipodato ) malloc(..) Significato : La malloc provoca la creazione di una variabile dinamica

nell’ heap e restituisce l'indirizzo della variabile creata.

Variabili Dinamiche

Esempio:

**#include <stdlib.h> typedef int tp; tp punt; ... punt=(tp )malloc(sizeof(int)); punt=12; heap punt