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

时间:2013-08-01 06:40:24

标签: c++ pointers

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];
}

3 个答案:

答案 0 :(得分:2)

在C ++中,vector应该是容器的默认选择。也应该避免裸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;

我不确定你在你所展示的代码中究竟要做什么,但肯定有更好的方法。如果您描述了您想要实现的目标,我们可以为您提供更多帮助。

答案 1 :(得分:0)

我已经包含了一个代码示例,说明如何使用动态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;
    }
}

答案 2 :(得分:-1)

首先你要避免

int (**aLines)[2] 

有点陈述。如果你事先知道2,我真的没有多大帮助。更好的是使用

int ***aLines

然后使用嵌套循环来启动

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

    }
}