Latest web development tutorials

C ++ aritmética de punteros

C ++ punteros C ++ punteros

Pointer es la dirección de una representación numérica. Por lo tanto, se pueden realizar operaciones aritméticas sobre los punteros. Puntero puede ser operación de cuatro aritmética: +, -, +, -.

Supongamos queptr es un puntero a una dirección de puntero de enteros 1000, es un número entero de 32 bits, dejar que la aritmética de punteros para llevar a cabo lo siguiente:

ptr++

Después de realizar la operación anterior, puntosPTR a la posición 1004, debido a ptr cada tiempo adicional que apuntará a la siguiente posición de bits que la posición actual se movió de nuevo cuatro bytes.En el caso de esta operación no afectará el valor real de la posición de memoria, mueva el puntero a la siguiente posición de memoria. Siptr apunta a una dirección de 1000 caracteres, la operación anterior hará que un puntero a la posición de 1001, ya que la siguiente posición de carácter en 1001.

Incrementar un puntero

Nos gusta usar un puntero en lugar de una matriz en el programa, porque el puntero variable se incrementa, y la matriz no puede aumentar, debido a que la matriz es un puntero constante. El siguiente programa incrementa el puntero de la variable secuencialmente acceso cada elemento de la matriz:

#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;
}

Cuando el código se compila y ejecuta, produce los siguientes resultados:

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

Disminuir un puntero

De manera similar, el puntero se decrementa y restando el número de bytes que es el valor de su tipo de datos, como sigue:

#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;
}

Cuando el código se compila y ejecuta, produce los siguientes resultados:

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

Comparar puntero

Puntero se puede utilizar para comparar la relación entre los operadores, como ==, <y>. Si p1 y p2 puntos a dos variables relacionadas, como con una serie de elementos diferentes, que pueden ser del tamaño de p1 y p2 comparación.

El siguiente procedimiento modifica el ejemplo anterior, siempre que la dirección del último elemento de un puntero variable es la dirección de la matriz es menor que o igual a & var [MAX - 1], poner la variable de puntero se incrementa:

#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;
}

Cuando el código se compila y ejecuta, produce los siguientes resultados:

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 ++ punteros C ++ punteros