Простой 3D-массив С++
Я новичок в С++, и я пытаюсь создать простой статический 3-мерный массив, а затем распечатать его на консоли.
Вот мой текущий код:
#include <iostream>
using namespace std;
int main()
{
const int MAX_ROW = 2;
const int MAX_COL = 2;
const int MAX_HEIGHT = 2;
int MyArray[MAX_ROW][MAX_COL][MAX_HEIGHT] = { {1,1},
{2,10},
{3,15},
{4,20},
{5,25},
{6,30},
{7,35},
{8,40} };
for(int Row = 0; Row < MAX_ROW; ++Row)
{
for(int Col =0; Col < MAX_COL; ++Col)
{
for(int Height = 0; Height < MAX_HEIGHT; ++Height)
{
cout << "Integer["<< Row << "][" << Col << "][" << Height << "] = " << MyArray[MAX_ROW][MAX_COL][MAX_HEIGHT] << endl;
}
}
}
return 0;
}
При компиляции компилятор уведомляет меня о том, что "error: too many initializers for ‘int [2][2][2]"
Другие вопросы использовали указатели, с которыми я не знаком.
Заранее благодарю вас!
Изменить: Синтаксис неверен, поэтому я скорректировал его с соответствующим соответствующим кодом, как показано ниже. Теперь в выводе программы каждое пространство массива равно 32767. Полное целое пространство вместо назначенных значений. Может ли кто-нибудь обратиться к этому в ответ? Я не изменил код, кроме моей инициализации массива.
Ответы
Ответ 1
Измените код следующим образом. Вы можете видеть, что есть две группы, содержащие два набора, каждый из которых имеет два элемента.
int MyArray[MAX_ROW][MAX_COL][MAX_HEIGHT] = {
{ {1,1},{2,10} },
{ {4,20},{5,25} }
};
Взгляните в следующем примере, чтобы сделать его более понятным.
int arr[2][3][4] = {
{ {1, 2, 3, 4}, {1, 2, 3, 4}, {1, 2, 3, 4} },
{ {1, 2, 3, 4}, {1, 2, 3, 4}, {1, 2, 3, 4} }
};
Как вы можете видеть, есть две группы, каждая из которых содержит три группы из 4 чисел.
Ответ 2
Ваш синтаксис неверен.
int a[2][2][3] = { // Initialize entire variable
{ // 1 of 2 (leftmost array)
{ 1, 2, 3 }, // 1 of 2 (inner array)
{ 4, 5, 6 }, // 2 of 2 (inner array)
},
{ // 2 of 2 (leftmost array)
{ 7, 8, 9 }, // 1 of 2 (inner array)
{ 10, 11, 12 }, // 2 of 2 (inner array)
},
}
То, что вы показали, будет int [8][2]
.
Ответ 3
Объявляйте массив 2x2x2, но определяя его как массив 2x8.
Кроме того, когда вы печатаете содержимое своего массива, вы используете MAX_ * в качестве индексов вместо ваших переменных цикла.
#include <iostream>
int main()
{
const int MAX_ROW = 2;
const int MAX_COL = 2;
const int MAX_HEIGHT = 2;
int MyArray[MAX_ROW][MAX_COL][MAX_HEIGHT] = {
{
{1,1}, {1,-1}
},
{
{2,10}, {2,-10}
}
};
for(int Row = 0; Row < MAX_ROW; ++Row)
for(int Col =0; Col < MAX_COL; ++Col)
for(int Height = 0; Height < MAX_HEIGHT; ++Height)
std::cout << "Integer["<< Row << "][" << Col << "][" << Height << "] = " << MyArray[MAX_ROW][MAX_COL][MAX_HEIGHT] << std::endl;
return 0;
}
Ответ 4
массив MyArray[MAX_ROW][MAX_COL][MAX_HEIGHT]
может содержать только 2 * 2 * 2 = 8 элементов,
но
{ {1,1},
{2,10},
{3,15},
{4,20},
{5,25},
{6,30},
{7,35},
{8,40} };
имеет 16 элементов.
поэтому слишком много инициализаторов
Ответ 5
Помимо неправильной инициализации массива, как указывали другие, вы также имеете ошибку при печати. Вы всегда печатаете тот же самый элемент, который даже не существует (это поведение undefined).
cout << "Integer["<< Row << "][" << Col << "][" << Height << "] = " << MyArray[Row][Col][Height] << endl;