C++ 指向数组的指针
除非你读过与 C++ 指针相关的章节,否则你很可能无法理解本章内容。
假设你对 C++ 中的指针有所了解,那么我们开始吧:数组名称是指向数组首元素的常量指针。因此,在声明中:-
double balance[50];
balance 是一个指向 &balance[0] 的指针,而 &balance[0] 是数组 balance 首元素的地址。因此,以下程序片段将 p 赋值给 balance 首元素的地址 -
double *p; double balance[10]; p = balance;
将数组名称用作常量指针是合法的,反之亦然。因此,*(balance + 4) 是访问 balance[4] 处数据的合法方式。
将第一个元素的地址存储在 p 中后,您可以使用 *p、*(p+1)、*(p+2) 等访问数组元素。以下示例展示了上述所有概念 -
#include <iostream> using namespace std; int main () { // 一个包含 5 个元素的数组。 double balance[5] = {1000.0, 2.0, 3.4, 17.0, 50.0}; double *p; p = balance; // 输出每个数组元素的值 cout << "Array values using pointer " << endl; for ( int i = 0; i < 5; i++ ) { cout << "*(p + " << i << ") : "; cout << *(p + i) << endl; } cout << "Array values using balance as address " << endl; for ( int i = 0; i < 5; i++ ) { cout << "*(balance + " << i << ") : "; cout << *(balance + i) << endl; } return 0; }
当编译并执行上述代码时,它会产生以下结果 -
Array values using pointer *(p + 0) : 1000 *(p + 1) : 2 *(p + 2) : 3.4 *(p + 3) : 17 *(p + 4) : 50 Array values using balance as address *(balance + 0) : 1000 *(balance + 1) : 2 *(balance + 2) : 3.4 *(balance + 3) : 17 *(balance + 4) : 50
在上例中,p 是一个指向 double 的指针,这意味着它可以存储 double 类型变量的地址。一旦 p 中有地址,*p 就会返回 p 中存储的地址处的值,正如上例所示。