指向指向由n个元素组成的数组的指针的C++指针

C++ pointer to a pointer to an array consisting of n elements

本文关键字:指针 C++ 数组 元素      更新时间:2023-10-16

C++如何初始化这个指针:

int (**aLines)[2] ?

我正在尝试初始化:

int (**aLines)[2] = (int(**)[2]) new int*[10];
for(int i = 0; i < 10; i++){
    aLines[i] = new int[5][2];
}

在C++中,向量应该是容器的默认选择。裸new也应该避免。除非必要,否则应避免动态分配对象。遵循这些准则将产生更安全、更易于维护的代码。

以下是如何制作一个int向量,一个指向所述向量的指针,以及一个指向该指针的指针。

std::vector<int> v = {3,8,1,6};
std::vector<int>* p = &v;
std::vector<int>** pp = &p;
std::cout << p->front() << std::endl;
std::cout << (*pp)->back() << std::endl;

我不确定您在显示的代码中到底想做什么,但肯定有更好的方法。如果你描述你正在努力实现的目标,我们可以为你提供更多帮助。

我已经包含了一个代码示例,说明如何用动态2D数组分配、使用和取消分配静态数组。

我希望它有用。

void allocate_print_and_deallocate_numbers() {
    // Allocate
    int **aLines[2];
    for (int i = 0; i < 2; i++) {
        aLines[i] = new int* [10];
        for (int j = 0; j < 10; j++) {
            aLines[i][j] = new int [5];
            for (int k = 0; k < 5; k++) {
                aLines[i][j][k] = i + j + k; // Assign a number
            }
        }
    }
    // Use
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 10; j++) {
            for (int k = 0; k < 5; k++) {
                std::cout << aLines[i][j][k] << std::endl;
            }
            std::cout << std::endl;
        }
        std::cout << std::endl;
    }
    // Deallocate
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 10; j++) {
            delete [] aLines[i][j];
        }
        delete [] aLines[i];
        aLines[i] = NULL;
    }
}