C++ 指针与数组
指针和数组密切相关。事实上,指针和数组在很多情况下可以互换。例如,指向数组开头的指针可以通过指针运算或数组式索引来访问该数组。考虑以下程序 -
#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}; for (int i = 0; i < MAX; i++) { *var = i; // 这是正确的语法 var++; // 这是错误的。 } return 0; }
将指针运算符 * 应用于 var 是完全可以接受的,但修改 var 的值是非法的。原因是 var 是一个指向数组开头的常量,不能用作左值。
由于数组名会生成一个指针常量,因此只要不对其进行修改,它仍然可以在指针式表达式中使用。例如,以下语句将 var[2] 赋值为 500 −
*(var + 2) = 500;
上述语句有效,并且由于 var 未发生改变,因此可以成功编译。