Neste tutorial, mostraremos como declarar array de arrays. Às vezes você precisa escolher dinamicamente qual array usar, por isso é melhor usar array de arrays.

Adquira componentes na Loja do Lab de Garagem

Você pode ter array de qualquer tipo. Se for um array char, então os valores serão char, array int, valores em int, assim por diante. Se você tiver um char* array, é um array de ponteiros com variáveis do tipo char. Por exemplo, cada valor  do "int valor[3]" pode ser acessado por "valor[0]" ou "*valor", e próximo item pode ser acessado por "valor[1]" ou "(*valor)+1".

Portanto, podemos armazenar endereços de um array em outro array.

Antes de mais nada, precisamos saber o tamanho de memória disponível na RAM. O Atmega328P tem 2Kbytes de memória RAM. Portanto só podemos declarar 2Kbytes de variáveis. Como alternativa, você pode armazenar utilizando a memória FLASH usando o PROGMEM.

Agora, vamos a um exemplo:

char line0[3] = { 'a', 'b', 'c' };
char line1[3] = { 'd', 'e', 'f' };
char line2[3] = { 'g', 'h', 'i' };
char* lines[4];
char* column;

void setup() {
lines[0] = line0;
lines[1] = line1;
lines[2] = line2;
Serial.begin(9600);
}

void loop() {
int i,j;
for(i=0;i<3;i++)
{
column = line[i]; // get the array address
for(j=0;j<3;j++)
{
Serial.print(*column++); // print the element, then increment the index
}
Serial.println(); // line break
}
while(1); // infinite loop to stop the program
}

Na programação, primeiro declaramos 3 arrays com 3 elementos: line0, line1, line2. Na função setup(), pegamos os endereços e armazenamos no array lines. Como o array é um ponteiro, nós não precisamos o símbolo "&" que refere-se ao endereço.

Na função loop(), podemos ver como acessá-lo. A variável column endereça ao elemento atual no array desejado. Copiamos o endereço do array, o qual é o mesmo endereço do primeiro elemento e então incrementamos para o próximo elemento.

O while(1); é para que o microcontrolador pare e não faça tudo de novo.

E é isso! Faça o UPLOAD no seu Arduino e abra a Serial Monitor para ver os endereços!

Esperamos que tenha gostado! Caso tenha dúvidas, poste aqui neste blog! Para sugestões de tutoriais, poste aqui! Para ver outros tutoriais e projetos desenvolvidos pela equipe LdG e por outros garagistas, clique aqui e aqui, respectivamente. Até a próxima!

Exibições: 13709

Comentar

Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!

Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)

Comentário de Engº Edelson Martins em 19 outubro 2019 às 12:22

Há um erro em: column = line[i]; // get the array address

O correto é: column = lines[i]; // get the array address

Deve-se acrescentar um 's' em line.

Comentário de Filipe Senna Silva de Lima em 30 março 2015 às 10:26

eu tentei compilar o codigo, mas o compilador diz que a variavel line não esta declarada. O erro aparece na linha 18.

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço