指针 与 数组 之间存在着深刻的联系。在许多情况下,指针 和 数组 实际上可以互换使用。例如,指向数组开头的指针可以使用数组风格的索引或指针算术来访问该数组。
以下面的 C++ 程序为例
#include <iostream>
using namespace std;
const int MAX = 5;
int main () {
int var[MAX] = {20, 200, 400, 800, 1000};
int *ptr;
// let us have array address in pointer.
ptr = var;
for (int i = 0; i < MAX; i++) {
cout << "Address of var will be [" << i << "] = ";
cout << ptr << endl;
cout << "Value of var will be[" << i << "] = ";
cout << *ptr << endl;
// point to the next location
ptr++;
}
return 0;
}
输出
Address of var will be [0] = 0x7ffd063d4750 Value of var will be[0] = 20 Address of var will be [1] = 0x7ffd063d4754 Value of var will be[1] = 200 Address of var will be [2] = 0x7ffd063d4758 Value of var will be[2] = 400 Address of var will be [3] = 0x7ffd063d475c Value of var will be[3] = 800 Address of var will be [4] = 0x7ffd063d4760 Value of var will be[4] = 1000
然而,指针和数组并非完全可以互换。
通过一个例子,让我们更清楚地理解这一点
#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; // correct syntax
var++; // incorrect syntax
}
return 0;
}
虽然在 var 上使用指针运算符 * 是允许的,但更改 var 的值是被禁止的。这是因为 var 不能用作左值,因为它是一个常量,将始终指向数组的开头。
通过一个简单的例子,让我们理解指针数组的概念。为此,我们编写一个 C++ 程序,主要使用一组四个整数作为数组。
#include <iostream> using namespace std; const int MAX = 4; int main () { int var[MAX] = {20, 200, 400, 800}; for (int i = 0; i < MAX; i++) { cout << "Value of var[" << i << "] = "; cout << var[i] << endl; } return 0; }
输出
Value of var[0] = 20 Value of var[1] = 200 Value of var[2] = 400 Value of var[3] = 800
有时我们可能需要保留一个可以存储指向各种数据类型(包括 int、char 等)的指针的数组。
下面提供了指向整数的指针数组的声明。
int *ptr[MAX];
根据此,ptr 是一组 MAX 整数指针。因此,ptr 的每个元素现在都存储一个指向 int 值。下面的示例使用四个整数,它们存储在以下指针数组中
#include <iostream>
using namespace std;
const int MAX = 4;
int main () {
int var[MAX] = {100, 1000, 2000, 3000};
int *ptr[MAX];
for (int i = 0; i < MAX; i++) {
ptr[i] = &var[i]; // assign the address of an integer.
}
for (int i = 0; i < MAX; i++) {
cout << "Value of var[" << i << "] = ";
cout << *ptr[i] << endl;
}
return 0;
}
输出
Value of var[0] = 100 Value of var[1] = 1000 Value of var[2] = 2000 Value of var[3] = 3000
您还可以使用指针数组来保存字符串列表,如下所示。
#include <iostream>
using namespace std;
const int MAX = 5;
int main () {
const char *names[MAX] = { "Pathu Khan", "Ali Kapoor", "Zera Vishal", "Kara Johar Ali Bose" };
for (int i = 0; i < MAX; i++) {
cout << "Value of names will be[" << i << "] = ";
cout << (names + i) << endl;
}
return 0;
}
输出
Value of names will be[0] = 0x7fffe86d2910 Value of names will be[1] = 0x7fffe86d2918 Value of names will be[2] = 0x7fffe86d2920 Value of names will be[3] = 0x7fffe86d2928 Value of names will be[4] = 0x7fffe86d2930