The Circuit Maker
Arduino8 min leitura

How to get the number of elements of an Array in Arduino

Aprenda a encontrar o tamanho ou número de elementos de um array no Arduino usando sizeof e fórmulas simples.

·

Para obter o número de elementos em um array do Arduino, use sizeof(array) / sizeof(array[0]). O operador sizeof() retorna o total de bytes que o array ocupa na memória, e dividindo pelo tamanho em bytes de um único elemento obtém-se a quantidade de elementos.

Referência Rápida

O que você precisaCódigoRetorna
Número de elementossizeof(arr) / sizeof(arr[0])Quantidade de elementos
Memória total usadasizeof(arr)Bytes
Tamanho de um elementosizeof(arr[0])Bytes

É comum usar arrays como parte do código que enviamos para o Arduino. Você pode ter declarado um array sem definir explicitamente seu tamanho:

int pinsDigitais[] = {2, 3, 4, 5, 6};

Seu primeiro instinto pode ser usar sizeof() diretamente:

int pinsDigitais[] = {2, 3, 4, 5, 6};
int totalPins = sizeof(pinsDigitais);  // Retorna 10, não 5!

Isso não funciona corretamente porque sizeof() retorna bytes, não o número de elementos.

Como Obter o Número de Elementos em um Array do Arduino

Tamanho do array = sizeof(array) / sizeof(array[0])
int pinsDigitais[] = {2, 3, 4, 5, 6};
int totalPins = sizeof(pinsDigitais) / sizeof(pinsDigitais[0]);
// totalPins = 10 / 2 = 5

Como sizeof() Funciona no Arduino

O operador sizeof() é embutido no C/C++ e retorna quantos bytes uma variável ou array ocupa na memória. É avaliado em tempo de compilação.

sizeof() com Diferentes Tipos de Dados

Tipo de DadoArduino Uno/Nano (AVR)Arduino Due / ESP32
bool / byte / char1 byte1 byte
int2 bytes4 bytes
long4 bytes4 bytes
float / double4 bytes4 bytes / 8 bytes
Ponteiro2 bytes4 bytes

Obter o Tamanho de um Array 2D no Arduino

int matriz[3][4] = {
  {1, 2, 3, 4},
  {5, 6, 7, 8},
  {9, 10, 11, 12}
};

int linhas = sizeof(matriz) / sizeof(matriz[0]);         // 3
int colunas = sizeof(matriz[0]) / sizeof(matriz[0][0]);   // 4

Erros Comuns com sizeof() no Arduino

Erro 1: Usar sizeof() Dentro de uma Função

Quando você passa um array para uma função, o C++ o converte em um ponteiro. sizeof() dentro da função retorna o tamanho do ponteiro — não o tamanho do array.

// ❌ ERRADO
void imprimirArray(int arr[]) {
  int len = sizeof(arr) / sizeof(arr[0]);  // Retorna 1 no Uno!
}

// ✅ CORRETO — passe o tamanho como parâmetro
void imprimirArray(int arr[], int len) {
  for (int i = 0; i < len; i++) {
    Serial.println(arr[i]);
  }
}

Erro 2: Esquecer de Dividir pelo Tamanho do Elemento

// ❌ ERRADO
int totalPins = sizeof(pinsDigitais);

// ✅ CORRETO
int totalPins = sizeof(pinsDigitais) / sizeof(pinsDigitais[0]);

Erro 3: Assumir que Todas as Placas Usam os Mesmos Tamanhos

int é 2 bytes em placas AVR mas 4 bytes em placas de 32 bits. Sempre use sizeof(arr[0]) em vez de um número fixo.

Melhor Prática: Definir o Tamanho em uma Variável

const int NUM_PINS = 5;
int pinsDigitais[NUM_PINS] = {2, 3, 4, 5, 6};

Criando uma Macro ARRAY_LENGTH Reutilizável

#define ARRAY_LENGTH(arr) (sizeof(arr) / sizeof(arr[0]))

Resumo

No Arduino (C++), não existe uma propriedade .length() embutida. Use:

int tamanho = sizeof(array) / sizeof(array[0]);
  • sizeof() retorna bytes, não elementos
  • Sempre divida por sizeof(array[0])
  • A fórmula não funciona dentro de funções (decay de ponteiro)
  • Para arrays 2D, use a mesma abordagem para linhas e colunas