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!
Comentar
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.
eu tentei compilar o codigo, mas o compilador diz que a variavel line não esta declarada. O erro aparece na linha 18.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por
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)