您的位置:

C++指针数组:实现数组元素的读写

C++指针数组:实现数组元素的读写

更新:

一、什么是指针数组

指针数组是指一个数组的元素都是指针类型,即指向其他变量的地址。可以将指针数组看作是一个数组,但每个元素都是指针,可以指向不同的变量。

    int a = 1, b = 2, c = 3;
    int *p[3]; // 定义一个指针数组,元素个数为3
    p[0] = &a; // 第0个元素指向变量a
    p[1] = &b; // 第1个元素指向变量b
    p[2] = &c; // 第2个元素指向变量c
    cout << *p[0] << " " << *p[1] << " " << *p[2] << endl; // 输出1 2 3

二、指针数组的应用

指针数组常用于实现动态内存分配,可以根据需要动态的生成指针数组,来灵活的操作内存。

    int n;
    cin >> n; // 用户输入元素个数
    int *p = new int[n]; // 动态分配内存
    for (int i = 0; i < n; i++)
    {
        cin >> *(p + i); // 用户输入元素的值
    }
    // 输出输入的元素值
    for (int i = 0; i < n; i++)
    {
        cout << *(p + i) << " ";
    }
    delete[] p; // 释放内存

另外,指针数组也可以用于实现多态性,通过基类的指针数组,来遍历所有子类对象。

    class Base {
    public:
        virtual void func() {
            cout << "Base::func()" << endl;
        }
    };
    class Derived1 : public Base {
    public:
        void func() {
            cout << "Derived1::func()" << endl;
        }
    };
    class Derived2 : public Base {
    public:
        void func() {
            cout << "Derived2::func()" << endl;
        }
    };
    int main()
    {
        Base* arr[2]; // 定义一个基类指针数组
        Derived1 d1;
        Derived2 d2;
        arr[0] = &d1; // 第一个元素指向Derived1对象
        arr[1] = &d2; // 第二个元素指向Derived2对象
        for (int i = 0; i < 2; i++)
        {
            arr[i]->func(); // 遍历所有子类对象并调用其func函数
        }
        return 0;
    }

三、指针数组的优势

指针数组可以充分利用指针的优势,节约内存空间。例如,对于一个数组元素的交换操作,使用指针数组可以大大减少内存操作。

    int a[2] = { 1, 2 };
    int *p[2] = { a, a + 1 }; // 指针数组元素指向a数组元素地址
    swap(*p[0], *p[1]); // 交换指针数组元素指向的变量的值
    cout << a[0] << " " << a[1] << endl; // 输出2 1

同时,指针数组还可以方便的使用指针运算,实现指向数组元素的操作。

    char s[5] = { 'a', 'b', 'c', 'd', 'e' };
    char *p[5]; // 定义char类型的指针数组
    for (int i = 0; i < 5; i++)
    {
        p[i] = &s[i]; // 指向s数组元素地址
    }
    for (char **q = p; q < p + 5; q++)
    {
        cout << **q << " "; // 输出a b c d e
    }

四、指针数组的注意事项

使用指针数组需要注意以下几点:

  1. 指针数组的每个元素必须是指针类型。
  2. 指针数组的元素指向的应该是已经存在的变量或动态分配的内存。
  3. 使用指针数组时,必须慎重考虑指针变量的生存期,否则会出现未定义的行为。
  4. 指针数组访问元素时必须保证下标不越界。

五、结论

指针数组是C++中非常重要的一个概念,它可以灵活的操作内存和对象的指针。在实际开发中,需要根据具体情况选择是否使用指针数组,在使用时要注意指针变量的生存期和下标访问的安全性。