Cosa sono i puntatori in C++ e come usarli

Difficoltà: scuola superiore

Materia: Informatica

Cosa sono i puntatori?

Sono semplicemente delle variabili, anche se c’è da considerare che sono delle variabili un po’ speciali. I puntatori rappresentano un tipo di variabile destinata a contenere l’indirizzo di memoria di un’altra variabile. In pratica il puntatore è una variabile che contiene un indirizzo di memoria. Quale indirizzo di memori? Quello della variabile a cui punta.

Inoltre ti consigliamo la visione di questi articoli:

Come implementare un programma C++ per la somma di due numeri interi

Programma in C++ per calcolare area e perimetro di figure geometriche

Come scrivere il codice di un programma C++ per il calcolo della media dei voti scolastici

Come scrivere un programma C++ che stampi il minimo e il massimo dati 3 numeri interi

Inoltre, ecco un libro consigliato da noi direttamente da Amazon che ti permette di imparare in modo semplice e veloce il linguaggio di programmazione C++

Il manuale introduce ai principi della programmazione scegliendo come linguaggio didattico il C++, il quarto per diffusione a livello mondiale, conservando dell’edizione originale l’approccio e l’orientamento più pragmatico che formale (Clicca nell’immagine per visualizzare il libro, oppure il link sotto).

Libro per fondamenti di programma in C++

Libro: Fondamenti di programmazione in C++(ACQUISTA SU AMAZON)

Per iniziare..

Facciamo finta che esista una variabile, che chiameremo appunto var, di tipo int, a cui punta il puntatore, chiamato per l’appunto punt.

La sintassi per dichiarare il puntatore è la seguente:

int *punt;

Per assegnare il valore al puntatore ci si deve prima ricordare di dichiarare la variabile verso cui si vuole che punti per poi assegnare l’indirizzo corrispondente di quella variabile al puntatore. Si utilizza invece la sintassi seguente:

int var;

punt = &var;

Come si può notare l’assegnazione non segue le assegnazioni classiche, piuttosto il valore del puntatore viene associato in un modo particolare. Il simbolo“&” ci dice che la variabile punt contiene l’indirizzo di memoria di var.

Supponiamo per semplicità quanto segue:

Come si può notare l’assegnazione non segue le assegnazioni classiche, piuttosto il valore del puntatore viene associato in un modo particolare. Il simbolo“&” ci dice che la variabile punt contiene l’indirizzo di memoria di var.

Supponiamo per semplicità quanto segue:

  • var ha un contenuto pari a 3 perché gli è stato assegnato via codice;
  • var si trova all’indirizzo di memoria 0x12;
  • punt si trova all’indirizzo di memoria 0x13;

Di seguito viene riportato un esempio di quale sarebbe il contenuto nella memoria.

Tabella 1

IndirizzoVariabile associataContenuto
0x12var3
0x13punt0x12
Table 1 Ipotesi sul contenuto della memoria dopo l’assegnazione di punt dell’indirizzo di memoria di var

Come si può notare il puntatore è la variabile hanno contenuti molto diversi tra di loro. Di per sé il puntatore non è un tipo intero ma punta a una variabile di cui il tipo è dichiarato intero.

I puntatori, in questo caso Il puntatore..

è una variabile che contiene l’indirizzo di memoria della variabile a cui punta.

Come già detto al puntatore gli viene detto di puntare a variabile con questa istruzione:

punt = &var;

Ma il puntatore..

Ha anche il potere di cambiare il contenuto di var. Supponiamo infatti di voler cambiare il contenuto di var dopo che è stato dichiarato il suo puntatore punt. Ci sono due vie per farlo:

  • assegnando direttamente var;
  • scrivendo il contenuto di var tramite punt;

Supponiamo per esempio di voler cambiare il contenuto di var tramite puntatore e di voler dare a var un valore pari a 5. Per farlo bisogna scrivere:

*punt=5;

E il nuovo contenuto delle memorie sarà il seguente:

Tabella 2

IndirizzoVariabile associataContenuto
0x12var5
0x13punt0x12
Tablella 2 ipotesi sul contenuto della memoria dopo il cambio del contenuto di var per mezzo di punt

Esempio per poterti esercitare con i puntatori

/******************************************************************************

                        Esercitazione con i puntatori

*******************************************************************************/

#include <iostream>

using namespace std;

int main()
{
    //dichiarazione della variabile puntatore
    float *puntatore;
    float *puntatore2;
    //dichiarazione della variabile variabile
    float variabile;
    //assegnazione di variabile
    variabile = 5.5;
    cout<<"Il contenuto di variabile è: " << variabile <<endl;
    cout<<"L'indirizzo di memoria di variabile è: " << &variabile <<endl;
    // tentativo di cambio contenuto di variabile
    variabile = 7.7;
    cout<<"Il nuovo contenuto di variabile è: " << variabile <<endl;
    cout<<"L'indirizzo di memoria di variabile è: " << &variabile <<endl;
    //dichiarazione di un'altra variabile variabile2
    float variabile2;
    //assegnazione di variabile
    variabile2 = 5.55;
    cout<<"Il contenuto di variabile2 è: " << variabile2 <<endl;
    cout<<"L'indirizzo di memoria di variabile2 è: " << &variabile2 <<endl;
    //assegnazione dell'indirizzo di memoria di variabile a puntatore
    puntatore = &variabile;
    cout<<"L'indirizzo di puntatore è: "<< &puntatore<<endl;
    cout<<"Il contenuto di puntatore è: "<< puntatore<<endl;
    cout<<"Il contenuto dell'indirizzo a cui punta il puntatore è: "<< *puntatore<<endl;
    puntatore2 = &variabile2;
    cout<<"L'indirizzo di puntatore2 è: "<< &puntatore2<<endl;
    cout<<"Il contenuto di puntatore2 è: "<< puntatore2<<endl;
    cout<<"Il contenuto dell'indirizzo a cui punta il puntatore2 è: "<< *puntatore2<<endl;
    return 0;
}

Un commento su “Cosa sono i puntatori in C++ e come usarli

I commenti sono chiusi.

Translate »