位置:首页 > 高级语言 > C++在线教程 > C++指针运算

C++指针运算

指针是地址是一个数字值;因此,可以在一个数值上的指针进行算术运算。有一些可以在指针被用于4种算术运算符:++- ,+和-

要理解指针运算,让我们考虑ptr是一个整数指针,它指向假设32位整数的地址1000,让我们上的指针执行以下操作运算:

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;

   // let us have array address in yiibaier.
   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;

      // yiibai to the next location
      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;

   // let us have address of the last element in yiibaier.
   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;

      // yiibai to the previous location
      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可以进行有意义的比较。

下面的程序修改前面的例子通过只要递增1,变量指针指向可以是小于或等于所述数组的最后一个元素,这是地址的地址 &var[MAX - 1]:

#include <iostream>

using namespace std;
const int MAX = 3;

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

   // let us have address of the first element in yiibaier.
   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;

      // yiibai to the previous location
      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