C++ 指针与数组

C++ 指针与数组

指针和数组具有密切关系。实际上,在许多情况下,指针和数组是可以互换的。例如,一个指向数组开头的指针可以通过使用指针算术或数组索引的方式来访问该数组。考虑以下程序−

#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 pointer.
   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;

      // point 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};

   for (int i = 0; i < MAX; i++) {
      *var = i;    // This is a correct syntax
      var++;       // This is incorrect.
   }

   return 0;
}

对于var变量来说,应用指针运算符*是完全可以接受的,但修改var的值是非法的。原因是var是一个指向数组开头的常量,不能作为可左值(l-value)使用。

因为数组名生成一个指针常量,所以仍然可以在指针样式的表达式中使用它,只要不修改它。例如,下面是一个有效的语句,将var[2]赋值为500:

*(var + 2) = 500;

上述声明是有效的,并且将成功编译,因为var没有被改变。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程