Присвоение элемента многомерного массива второму массиву
У меня есть два массива. Первый массив представляет собой многомерный массив, содержащий значения цвета.
Второй массив хранит активный цвет из первого массива. Как присвоить элемент из многомерного массива colors второму массиву EXCLUSIVE_COLOR?
int colors[][3] = {
{ 255, 0, 0 },
{ 0, 255, 0 },
{ 0, 0, 255 },
{ 253, 7, 210 }
};
int EXCLUSIVE_COLOR[3] = {0};
Я попробовал следующее, но ничего не помогло:
EXCLUSIVE_COLOR = {
colors[0][0],
colors[0][1],
colors[0][2]
};
// ошибка: присваивание массиву из списка инициализаторов
EXCLUSIVE_COLOR = colors[0];
// ошибка: неверное присвоение массива
@McWayWeb, 👍0
Обсуждение2 ответа
Лучший ответ:
Вы можете скопировать массив:
EXCLUSIVE_COLOR[0] = colors[0][0];
EXCLUSIVE_COLOR[1] = colors[0][1];
EXCLUSIVE_COLOR[2] = colors[0][2];
но это не работает при инициализации.
Кроме того, вы можете объявить EXCLUSIVE_COLOR
как указатель на
массив из 3 целых чисел:
int (*EXCLUSIVE_COLOR)[3]; // указатель на массив 3 из int
Затем вы можете указать эту точку на строку 2D-массива либо с помощью присваивая указатель или при инициализации:
int (*EXCLUSIVE_COLOR)[3] = &colors[0]; // инициализация
// Далее в программе:
EXCLUSIVE_COLOR = &colors[1];
Обратите внимание, что при использовании этого указателя вам придется явно разыменовать его:
for (int i = 0; i < 3; i++)
Serial.println((*EXCLUSIVE_COLOR)[i]);
Обновление: как указал Юрай в комментарии, вместо этого вы можете сделать
EXCLUSIVE_COLOR
указатель на int. В этом случае вы сделаете это точкой
к первому элементу в нужной строке:
int* EXCLUSIVE_COLOR = &colors[0][0];
Преимуществом этого подхода является то, что вы можете использовать указатель» языка для упрощения синтаксиса:
int* EXCLUSIVE_COLOR = colors[0];
// Потом
Serial.println(EXCLUSIVE_COLOR[i]);
указатель на указатель? это не выглядит правильно, @Juraj
@Juraj: это не указатель на указатель, это указатель на массив., @Edgar Bonet
Используйте массивы только там, где это уместно:
struct Color {byte r, g, b;};
const Color colors[] = {
{0,255,0},
{255,0,0}
};
const Color red = colors[1];
Это работает и без const
. Но вы должны рассмотреть возможность использования const
везде, где это возможно.
- Возможно ли иметь массив массивов int?
- Замена нескольких выводов pinMode() и digitalWrite() на массив
- Ошибка: invalid application of 'sizeof' to incomplete type 'int []' при попытке вычислить размер массива в библиотеке
- Инициализация массива структур
- Невозможно создать массив типа const char*
- Работает ли конструкция int array[100] = {0} на Arduino?
- Массив динамического размера в качестве члена класса
- Длина константного массива uint8_t*
каков тип EXCLUSIVE_COLOR. вам нужен указатель на массив или копию массива?, @Juraj
Любой из них будет работать. EXCLUSIVE_COLOR — массив из 3-х элементов., @McWayWeb
int* EXCLUSIVE_COLOR = цвета[0];
. а затем вы можете использоватьEXCLUSIVE_COLOR[i]
, @JurajЗачем вы используете двумерный массив, если на самом деле у вас есть одномерный массив элементов
Color
?, @DataFiddler