Latest web development tutorials

C ++ aritmetica dei puntatori

C ++ puntatori C ++ puntatori

Pointer è l'indirizzo di una rappresentazione numerica. Pertanto, è possibile eseguire operazioni aritmetiche sui puntatori. Pointer può essere funzionamento a quattro aritmetica: +, -, +, -.

PTR Supponiamo che è un puntatore ad un indirizzo puntatore intero 1000, è un intero a 32 bit, lasciare che il l'aritmetica dei puntatori per eseguire le seguenti:

ptr++

Dopo aver eseguito l'operazione di cui sopra, puntiPTR per posizionare 1004, perché ptr ogni ulteriore tempo punterà alla successiva posizione intero che la posizione attuale spostato indietro di quattro byte.Nel caso di questa operazione non influenzerà il valore effettivo della posizione di memoria, spostare il puntatore alla successiva posizione di memoria. Septr punta ad un indirizzo di 1000 caratteri, l'operazione sopra causerà un puntatore alla posizione 1001, poiché la posizione del carattere successivo nel 1001.

Incremento un puntatore

Ci piace utilizzare un puntatore invece di un array nel programma, perché la variabile puntatore viene incrementato, e l'array non può aumentare, perché la matrice è un puntatore costante. Il seguente programma incrementa il puntatore variabile sequenzialmente accesso ogni elemento dell'array:

#include <iostream>

using namespace std;
const int MAX = 3;

int main ()
{
   int  var[MAX] = {10, 100, 200};
   int  *ptr;

   // 指针中的数组地址
   ptr = var;
   for (int i = 0; i < MAX; i++)
   {
      cout << "Address of var[" << i << "] = ";
      cout << ptr << endl;

      cout << "Value of var[" << i << "] = ";
      cout << *ptr << endl;

      // 移动到下一个位置
      ptr++;
   }
   return 0;
}

Quando il codice di cui sopra è compilato ed eseguito, produce i seguenti risultati:

Address of var[0] = 0xbfa088b0
Value of var[0] = 10
Address of var[1] = 0xbfa088b4
Value of var[1] = 100
Address of var[2] = 0xbfa088b8
Value of var[2] = 200

Decrementare un puntatore

Analogamente, il puntatore viene decrementato e sottraendo il numero di byte che è il valore del tipo di dati, come segue:

#include <iostream>

using namespace std;
const int MAX = 3;

int main ()
{
   int  var[MAX] = {10, 100, 200};
   int  *ptr;

   // 指针中最后一个元素的地址
   ptr = &var[MAX-1];
   for (int i = MAX; i > 0; i--)
   {
      cout << "Address of var[" << i << "] = ";
      cout << ptr << endl;

      cout << "Value of var[" << i << "] = ";
      cout << *ptr << endl;

      // 移动到下一个位置
      ptr--;
   }
   return 0;
}

Quando il codice di cui sopra è compilato ed eseguito, produce i seguenti risultati:

Address of var[3] = 0xbfdb70f8
Value of var[3] = 200
Address of var[2] = 0xbfdb70f4
Value of var[2] = 100
Address of var[1] = 0xbfdb70f0
Value of var[1] = 10

Confronta puntatore

Pointer può essere usato per confrontare il rapporto tra operatori come ==, <e>. Se p1 e p2 punti a due variabili correlate, come ad esempio con una serie di elementi diversi, può essere la dimensione di p1 e p2 rispetto.

La seguente procedura modifica l'esempio precedente, finché l'indirizzo dell'ultimo elemento di un puntatore variabile è l'indirizzo della matrice è inferiore o uguale a & var [MAX - 1], si inserisce la variabile puntatore viene incrementato:

#include <iostream>

using namespace std;
const int MAX = 3;

int main ()
{
   int  var[MAX] = {10, 100, 200};
   int  *ptr;

   // 指针中第一个元素的地址
   ptr = var;
   int i = 0;
   while ( ptr <= &var[MAX - 1] )
   {
      cout << "Address of var[" << i << "] = ";
      cout << ptr << endl;

      cout << "Value of var[" << i << "] = ";
      cout << *ptr << endl;

      // 指向上一个位置
      ptr++;
      i++;
   }
   return 0;
}

Quando il codice di cui sopra è compilato ed eseguito, produce i seguenti risultati:

Address of var[0] = 0xbfce42d0
Value of var[0] = 10
Address of var[1] = 0xbfce42d4
Value of var[1] = 100
Address of var[2] = 0xbfce42d8
Value of var[2] = 200

C ++ puntatori C ++ puntatori