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