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ê precisa | Código | Retorna |
|---|---|---|
| Número de elementos | sizeof(arr) / sizeof(arr[0]) | Quantidade de elementos |
| Memória total usada | sizeof(arr) | Bytes |
| Tamanho de um elemento | sizeof(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 = 5Como 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 Dado | Arduino Uno/Nano (AVR) | Arduino Due / ESP32 |
|---|---|---|
bool / byte / char | 1 byte | 1 byte |
int | 2 bytes | 4 bytes |
long | 4 bytes | 4 bytes |
float / double | 4 bytes | 4 bytes / 8 bytes |
| Ponteiro | 2 bytes | 4 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]); // 4Erros 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