Saltar al contenido

¿Cómo puedo declarar un array de tamaño variable (Globalmente)

Nuestro equipo de trabajo ha pasado horas investigando para dar espuestas a tus preguntas, te regalamos la resolución por esto nuestro deseo es serte de gran ayuda.

Solución:

Su pregunta tiene 2 partes en realidad.

1/ ¿Cómo puedo declarar el tamaño constante de un array afuera de array?

Puedes usar un macro

#define ARRAY_SIZE 10
...
int myArray[ARRAY_SIZE];

o usar una constante

const int ARRAY_SIZE = 10;
...
int myArray[ARRAY_SIZE];

si inicializaste el array y necesita saber su tamaño, entonces puede hacer:

int myArray[] = 1, 2, 3, 4, 5;
const int ARRAY_SIZE = sizeof(myArray) / sizeof(int);

el segundo sizeof depende del tipo de cada elemento de su arrayaquí int.

2/ ¿Cómo puedo tener un array ¿Qué tamaño es dinámico (es decir, no se conoce hasta el tiempo de ejecución)?

Para eso, necesitará una asignación dinámica, que funciona en Arduino, pero generalmente no se recomienda, ya que esto puede causar que el “montón” se fragmente.

Puedes hacer (forma C):

// Declaration
int* myArray = 0;
int myArraySize = 0;

// Allocation (let's suppose size contains some value discovered at runtime,
// e.g. obtained from some external source)
if (myArray != 0) 
    myArray = (int*) realloc(myArray, size * sizeof(int));
 else 
    myArray = (int*) malloc(size * sizeof(int));

O (forma C++):

// Declaration
int* myArray = 0;
int myArraySize = 0;

// Allocation (let's suppose size contains some value discovered at runtime,
// e.g. obtained from some external source or through other program logic)
if (myArray != 0) 
    delete [] myArray;

myArray = new int [size];

Para obtener más información sobre los problemas con la fragmentación del montón, puede consultar esta pregunta.

Te mostramos comentarios y puntuaciones

Tienes la opción de añadir valor a nuestro contenido informacional participando con tu veteranía en las anotaciones.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *