matriz - estructuras en c++ pdf
Fácil acceso a múltiples matrices de estructuras (2)
Acabo de encontrar una solución que es lo suficientemente buena para mí. Debido a que la buena manera con una matriz combinada no es posible, acabo de escribir una función que revisa el índice y luego accede al elemento correcto en una de las matrices.
void setLED(int number, CRGB color){
if (number < leds_left_size){
leds_left[number] = color;
}else if (number >= leds_left_size && number < leds_left_size + leds_top_size){
leds_top[number - leds_left_size] = color;
}else if (number >= leds_left_size + leds_top_size && number < leds_top_size + leds_left_size + leds_right_size){
leds_right[number - leds_left_size - leds_top_size] = color;
}else{
leds_bottom[number - leds_left_size - leds_top_size - leds_right_size] = color;
}
}
No soluciona exactamente mi pregunta, pero funciona como una solución alternativa
Tengo 2 matrices de estructuras
myStruct leds_left[20];
myStruct leds_right[20];
Necesito una forma de combinar las dos estructuras, para poder usarla como:
*(structPtr[10]) // points to element of leds_left[10]
*(structPtr[30]) // points to element of leds_right[10]
Ya probé lo siguiente:
myStruct ** structPtr = (myStruct**) malloc((20 + 20) * sizeof(myStruct*));
structPtr[0] = &leds_right[15]; //just with one element for testing
*(structPtr[0]) = newValue;
¿Qué estoy haciendo mal?
Para estar seguro de que leds_left
y leds_right
están realmente asignados en memoria consecutiva, deben estar "estructurados juntos". Esto en combinación con una union
podría proporcionarle lo que desea:
#include <stdio.h>
typedef struct { int i; /* ... */ } myStruct;
static union {
struct {
myStruct leds_left[20];
myStruct leds_right[20];
};
myStruct leds_all[40];
} data;
int main()
{
for (int i = 0; i < 20; ++i) {
data.leds_left[i].i = 1 + i;
data.leds_right[i].i = -(1 + i);
}
for (int i = 0; i < 40; ++i) {
printf(" %d", data.leds_all[i].i);
}
printf("/n");
return 0;
}
Compilado y probado con gcc en cygwin en Windows 10 (64 bit):
$ gcc -std=c11 -o test-struct-array test-struct-array.c
$ ./test-struct-array.exe
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20
$
¡Atención!
El embalaje y la alineación pueden convertirse en un problema (dependiendo de qué componentes myStruct
).