I have two arrays. The first array is a multidimensional array holding color values.
The 2nd array stores an active color from the 1st array. How can I assign an element from the multidimensional colors array to the 2nd EXCLUSIVE_COLOR array?
int colors[][3] = {
{ 255, 0, 0 },
{ 0, 255, 0 },
{ 0, 0, 255 },
{ 253, 7, 210 }
};
int EXCLUSIVE_COLOR[3] = {0};
I tried the following but neither seemed to work:
EXCLUSIVE_COLOR = {
colors[0][0],
colors[0][1],
colors[0][2]
};
// error: assigning to an array from an initializer list
EXCLUSIVE_COLOR = colors[0];
// error: invalid array assignment
2 Answers 2
You can copy the array:
EXCLUSIVE_COLOR[0] = colors[0][0];
EXCLUSIVE_COLOR[1] = colors[0][1];
EXCLUSIVE_COLOR[2] = colors[0][2];
but this doesn't work in an initialization.
Alternatively, you can declare EXCLUSIVE_COLOR
as a pointer to an
array of 3 integers:
int (*EXCLUSIVE_COLOR)[3]; // pointer to array 3 of int
Then you can have this point to a row of the 2D array, either by assigning the pointer or in the initialization:
int (*EXCLUSIVE_COLOR)[3] = &colors[0]; // initialization
// Later in the program:
EXCLUSIVE_COLOR = &colors[1];
Note that when using this pointer, you will have to explicitly dereference it:
for (int i = 0; i < 3; i++)
Serial.println((*EXCLUSIVE_COLOR)[i]);
Edit: As pointed out by Juraj in a comment, you can instead make
EXCLUSIVE_COLOR
a pointer to int. In this case you will make it point
to the first element in the row you want:
int* EXCLUSIVE_COLOR = &colors[0][0];
One nice thing of this approach is that you can use the "decay to pointer" feature of the language to simplify the syntax:
int* EXCLUSIVE_COLOR = colors[0];
// Later
Serial.println(EXCLUSIVE_COLOR[i]);
-
a pointer to pointer? it doesn't look right2020年06月08日 09:37:47 +00:00Commented Jun 8, 2020 at 9:37
-
1@Juraj: It's not a pointer to pointer, it's a pointer to an array.Edgar Bonet– Edgar Bonet2020年06月08日 09:39:09 +00:00Commented Jun 8, 2020 at 9:39
Use arrays only where appropriate:
struct Color {byte r, g, b;};
const Color colors[] = {
{0,255,0},
{255,0,0}
};
const Color red = colors[1];
This works without const
as well. But you should consider using const
wherever possible.
EXCLUSIVE_COLOR
. you want a pointer to the array or a copy of the array?int* EXCLUSIVE_COLOR = colors[0];
. and then you can useEXCLUSIVE_COLOR[i]
Color
elements in reality?