C++ 指向数组指针

  • 指向数组的C++指针

    除非您阅读了与C++指针相关的章节,否则您很可能不会理解本章。因此,假设您对C++中的指针有一点了解,那么让我们开始:数组名称是指向数组第一个元素的常量指针。因此,在声明中-
    
    double balance[50];
    
    balance是指向&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 () {
       // an array with 5 elements.
       double balance[5] = {1000.0, 2.0, 3.4, 17.0, 50.0};
       double *p;
    
       p = balance;
     
       // output each array element's value 
       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中的地址可用的值。