首先指针和数组是密切相关的,而事实上数组和指针是可以进行互换的
Eg:一个指向数组开头的指针,可以通过使用指针的算术运算或数组索引来访问数组。请看下面的程序.
#include <iostream>using namespace std;
const int MAX = 3;int main ()
{int var[MAX] = {11, 101, 201};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] = 11
Address of var[1] = 0xbfa088b4
Value of var[1] = 101
Address of var[2] = 0xbfa088b8
Value of var[2] = 201
指针和数组并不是完全互换的
#include <iostream>using namespace std;
const int MAX = 3;int main ()
{int var[MAX] = {11, 101, 201};for (int i = 0; i < MAX; i++){*var = i; // 这是正确的语法var++; // 这是不正确的}return 0;
}
把指针运算符 * 应用到 var 上是完全可以接受的,但修改 var 的值是非法的。这是因为 var 是一个指向数组开头的常量,不能作为左值。
#include <iostream>using namespace std;
const int MAX = 3;int main ()
{int var[MAX] = {11, 101, 201};for (int i = 0; i < MAX; i++){cout << "Value of var[" << i << "] = ";cout << var[i] << endl;}return 0;
}
编译结果如下:
Value of var[0] = 11
Value of var[1] = 101
Value of var[2] = 201