Latest web development tutorials

C ++ указатель арифметика

C ++ указатели C ++ указатели

Указатель представляет собой адрес численного представления. Таким образом, вы можете выполнять арифметические операции над указателями. Указатель может быть четыре арифметические операции: +, -, +, -.

ПустьPTR является указателем на адрес 1000 целочисленный указатель, представляет собой 32-битное целое число, пусть арифметические операции над указателями для выполнения следующих действий :

ptr++

После выполнения вышеуказанной операции,PTR указывает на позицию 1004, так как PTR каждого дополнительного времени он будет указывать на следующую позицию целого , что текущая позиция перемещается назад четыре байта.В случае этой операции не повлияет на фактическое значение ячейки памяти, переместите указатель на следующую ячейку памяти. ЕслиPTR указывает на адрес 1000 знаков, вышеуказанная операция приведет указатель на позицию 1001, так как следующий символ в 1001 году .

Увеличивая указатель

Мы хотели бы использовать указатель вместо массива в программе, так как переменная указатель увеличивается на единицу, а массив не может увеличиваться, так как массив является постоянным указателем. Следующая программа увеличивает переменную указатель для последовательного доступа к каждому элементу в массиве:

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

Когда приведенный выше код компилируется и выполняется, он дает следующие результаты:

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

Декремент указатель

Точно так же, указатель уменьшается на единицу и вычитают количество байтов, которое является значением типа данных, следующим образом:

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

Когда приведенный выше код компилируется и выполняется, он дает следующие результаты:

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

Сравнить указатель

Указатель может быть использован для сравнения отношения между операторами, такими как ==, <и>. Если p1 и p2 точки на двух связанных переменных, таких как с массивом различных элементов, она может быть размером с p1 и p2 по сравнению.

Следующая процедура изменяет приведенный выше пример, до тех пор, как адрес последнего элемента переменной указателя является адрес массива меньше или равно & вар [MAX - 1], поместите переменную указатель увеличивается на единицу:

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

Когда приведенный выше код компилируется и выполняется, он дает следующие результаты:

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 ++ указатели C ++ указатели