English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Manuale di base di C++

Controllo dei flussi di C++

Funzione in C++

Array e stringhe di C++

Strutture dati di C++

Classi e oggetti di C++

Puntatore in C++

Ereditarietà in C++

Manuale di STL in C++

Manuale di riferimento di C++

Puntatore in C++

In questo articolo, imparerai tutte le conoscenze sui puntatori. Imparerai come memorizzare valori nel computer e come accedervi tramite puntatori.

I puntatori sono una delle caratteristiche potenti di C++, che li distingue dagli altri linguaggi di programmazione (come Java e Python).

I puntatori nei programmi C++ vengono utilizzati per accedere alla memoria e manipolare gli indirizzi.

Indirizzo C++

Per comprendere i puntatori, dovresti prima sapere come memorizzare i dati nel computer.

Ogni variabile creata nel programma viene assegnata una posizione nella memoria del computer. Il valore memorizzato dalla variabile viene effettivamente memorizzato nel posizione specificata.

Per sapere dove vengono memorizzati i dati, C++ ha un operatore &. L'operatore & (riferimento) fornisce l'indirizzo occupato dalla variabile.

Se var è una variabile, &var fornisce l'indirizzo della variabile.

Esempio 1: Indirizzo in C++

#include <iostream>
using namespace std;
int main()
{
    int var1 = 3;
    int var2 = 24;
    int var3 = 17;
    cout << &var1 << endl;
    cout << &var2 << endl;
    cout << &var3 << endl;
}

输出结果

0x7fff5fbff8ac
0x7fff5fbff8a8
0x7fff5fbff8a4

Attenzione: Potrebbe non ottenere lo stesso risultato sul tuo sistema.

L'0 iniziale indica che l'indirizzo è in formato esadecimale.

Attenzione, la differenza tra il primo indirizzo e il secondo indirizzo è di 4 byte, e la differenza tra il secondo indirizzo e il terzo indirizzo è di 4 byte.

Questo è perché nel sistema a 64 bit, la dimensione dell'intero (variabile di tipo int) è di 4 byte.

Variabile puntatore

C++ ti permette di operare direttamente sui dati nella memoria del computer. Puoi allocare e deallocare qualsiasi spazio nella memoria secondo necessità. Questo viene fatto utilizzando la variabile puntatore (puntatore).

Una variabile puntatore è una variabile che punta a un indirizzo specifico di un altro variabile memorizzata nella memoria.

Come dichiarare un puntatore?

int *p;
      o
int* p;

La seguente istruzione definisce una variabile puntatore p. Salva l'indirizzo di memoria

La stella (*) è l'operatore di dereferenziazione, che significapuntatore puntato.

In questo caso, il puntatore p è un puntatore a int, ossia punta all'indirizzo di memoria del valore intero.

Operatore di riferimento (&) e operatore di dereferenziazione (*)

Come menzionato sopra, l'operatore di riferimento (&) fornisce l'indirizzo della variabile.

Per ottenere il valore memorizzato all'indirizzo di memoria, utilizziamo l'operatore di dereferenziazione (*).

Ad esempiose la variabile number è memorizzata all'indirizzo di memoria0x123e contiene un valore5.

l'operatore di riferimento (&) fornisce un valore0x123e l'operatore di dereferenziazione (*) fornisce un valore5.

Attenzione:Attenzione: il simbolo (*) utilizzato nella dichiarazione del puntatore c++ non è un puntatore di riferimento. È solo un simbolo simile a quello per creare un puntatore.

Esempio 2: Puntatore C++

C ++程序演示了指针的工作。

#include <iostream>
using namespace std;
int main() {
    int *pc, c;
    
    c = 5;
    cout << "Address of c (&c): " << &c << endl;
    cout << "Value of c (c): " << c << endl << endl;
    pc = &c;    // 指针pc保存变量c的内存地址
    cout << "pc持有的指针地址(pc): " << pc << endl;
    cout << "地址指针pc持有的值(*pc): " << *pc << endl << endl;
    
    c = 11;    // 内存地址&c中的值从5更改为11。
    cout << "地址指针pc持有(pc): " << pc << endl;
    cout << "地址指针pc持有的内容(*pc): " << *pc << endl << endl;
    *pc = 2; 
    cout << "Address of c (&c): " << &c << endl;
    cout << "Value of c (c): " << c << endl << endl;
    return 0;
}

输出结果

Address of c (&c): 0046FD44
Value of c (c): 5
pc持有的指针地址(pc): 0046F
地址指针pc持有的值(*pc): 5
地址指针pc持有(pc): 0046FD4
地址指针pc持有的内容(*pc):
Address of c (&c): 0046FD44
Value of c (c): 2

程序的用法说明

  • 当c = 5;值5存储在变量c-0x7fff5fbff8c 的地址中。

  • 当pc = &c;指针pc的地址为c-0x7fff5fbff8c时,表达式(解引用运算符)*pc输出存储在该地址中的值5。

  • 当c = 11;由于pc持有的地址指针与c - 0x7fff5fbff8c相同,所以当执行表达式*pc时,c的值也会发生变化,现在输出11。

  • 当*pc = 2时;它改变了pc - 0x7fff5fbff8c存储的地址的内容。这个从11变成了2。因此,当我们输出c的值时,这个值也是2。

使用指针时的常见错误

假设您希望指针pc指向c的地址。然后,

int c, *pc;
pc=c;  /* 错误!  pc是地址,而c不是地址。 */
*pc=&c; /*错误!  * pc是地址指向的值,而&c是地址。*/
pc=&c; /* Corretto! * pc è un indirizzo, e &c è anche un indirizzo. */
*pc=c; /* Corretto! * pc è il valore puntato dall'indirizzo, e c è anche un valore. */

In entrambi i casi, il puntatore pc non punta all'indirizzo di C.

Dovresti anche guardare questi tutorial relativi ai puntatori: