Noções básicas de C++ em um Arduino, parte 3: ponteiros e matrizes

Tempo de leitura: 3 minutes

Este Noções básicas de C++ em uma série Arduino cobre muitos elementos diferentes necessários para todos os tipos de projetos e ideias em um Arduino. Nesta entrada, abordamos ponteiros e matrizes em C++.

Até agora, você viu como pode armazenar um único valor em uma variável. No entanto, e se você quiser salvar vários valores como um grupo reconhecível? Matrizes são um método que você pode usar para fazer isso. Embora eles não sejam capazes de armazenar vários valores em uma única variável, eles permitem que você salve vários valores relacionados na memória do Arduino como um grupo coerente.

 

Noções básicas de matrizes

Arrays são exatamente o que seu nome sugere: um arranjo de valores com o mesmo tipo. Os elementos de um array geralmente são colocados na memória um após o outro.

Suponhamos que você queira armazenar 128 valores recebidos de um sensor de temperatura. Com o que você aprendeu até agora, você só poderia criar 128 variáveis individuais, como:

float measurement_1 = 19.8f;
float measurement_2 = 22.21f;
float measurement_3 = 23.6f;
float measurement_4 = 17.42f;
// …
float measurement_128 = 31.63f;

Além de ser uma dor de escrever e manter, também não haveria uma maneira fácil de lidar com todas essas variáveis. Se você quisesse imprimir seus valores, por exemplo, você teria que fazer 128 chamadas individuais para o método de impressão.

Conforme mencionado acima, você pode usar matrizes para criar um campo coerente de valores semelhantes. Para isso, você deve definir o tipo e o nome do array, assim como faria com qualquer outra variável. No entanto, você adiciona colchetes para indicar que deseja criar uma matriz. Dentro dos colchetes, você define o tamanho da matriz:

float measurements[128];

Isso criará um array vazio de 128 variáveis float. No entanto, você também pode inicializar uma matriz definindo uma lista de valores que deseja armazenar:

// Isso armazenará os cinco caracteres
char text[] = {'H', 'E', 'L', 'L', 'O'};

// Você também pode adicionar o comprimento da matriz e definir uma lista de valores como:
String names[6] = {"Ben", "Sarah", "Julia", "Peter", "Michael", "XR30-Z"};

Observe que as matrizes sempre têm um comprimento fixo que você não pode alterar mais tarde.

 

Acessando Elementos de Matriz

Você pode acessar os elementos armazenados em uma matriz escrevendo seu nome seguido por um índice entre colchetes:

// Obtém o primeiro elemento da matriz
float value = measurements[0];

// Obtém o último elemento da matriz
float value = measurements[127];

// Leia algum outro valor
float value = measurements[51];

Os índices de matriz sempre começam com zero. Se você solicitar um índice muito pequeno ou muito grande, produzirá um erro de tempo de execução ou um comportamento não determinístico.

 

Uma breve introdução aos indicadores

Outra maneira de acessar os elementos do array é usar um ponteiro. Você pode pensar em um ponteiro como algo que, bem, aponta para um local específico na memória do Arduino. A definição de um novo ponteiro funciona de forma semelhante à criação de uma variável. Você começa com o tipo e o nome. No entanto, os ponteiros são marcados com um símbolo de asterisco que vem após o tipo:

// A matriz de antes
char text[] = {'H', 'E', 'L', 'L', 'O'};

// Um ponteiro apontando para o endereço do primeiro elemento do array de texto
char* beginning = &text[0];

// Um ponteiro que aponta para o início do texto
char* alt_beginning = text;

Como você pode ver, você pode colocar um E comercial na frente do nome de uma variável para obter seu endereço, que pode, então, ser armazenado em um ponteiro. Uma grande vantagem dos ponteiros é que você pode usar aritmética simples para alterar o endereço ao qual eles fazem referência:

char H = *(beginning + 0);
char E = *(beginning + 1);
char L1 = *(beginning + 2);
char L2 = *(beginning + 3);
char O = *(beginning + 4);

Você deve observar duas coisas: Em primeiro lugar, há outro asterisco na frente do endereço que você deseja ler. Isso é chamado de desreferenciação e significa simplesmente que você não está interessado no endereço, mas sim no valor armazenado nesse endereço. Além disso, a adição acontece entre parênteses. Isso é importante porque, caso contrário, você primeiro desreferencie o valor do ponteiro e, em seguida, adicione um número a ele, o que levaria a um valor diferente.

 

Resumo

Você pode usar matrizes para agrupar valores relacionados semelhantes. Observe que você só pode armazenar valores do mesmo tipo em uma única matriz. As matrizes têm um comprimento fixo e você pode acessar seus itens com um índice. Esses índices começam em zero. Você também pode usar um ponteiro para acessar os elementos de uma matriz. Use o operador E comercial para obter o endereço de uma variável. Utilize o asterisco para remover a referência de um ponteiro e ler o valor da variável para a qual ele aponta.