una matriz matematica lenguaje funciones estructuras estructura datos con arreglo array anidadas c arrays struct arduino

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 ).