Baixe o app para aproveitar ainda mais
Prévia do material em texto
Estrutura de Dados 00 - Funções, ponteiros e alocação dinâmica Manoel Vilela <2017-08-21 Mon 14:00> Sumário 1 Resumo 1 2 Tipos de alocações de Matrizes 2 1 Resumo Nesta aula deu-se uma introdução de vários conceitos básicos para a disci- plina de estrutura de dados. Dentre eles, sobre especificamente a linguagem C, foi abordada de maneira sucinta e breve os seguintes tópicos: 1. Funções/Procedimentos 2. Manipulação de Ponteiros 3. Passagem por valor 4. Passagem por referência 5. Vetores como ponteiros 6. Vetores e sua natureza contígua 7. Notação de ponteiros e vetores 8. Matrizes como vetores contíguos 9. Alocação dinâmica com malloc 10. Uso restrito de malloc (pode falhar às vezes) 1 11. Comparação de memória alocada dinamicamente e estática 12. Estilos de armazenamento de matrizes: vetor contínuo e ponteiro de ponteiros O professor tem o nome de Jarbas e ele é bem expressivo. Foi uma boa aula e intriga bastante os alunos a pensarem, perguntarem. Além disso tem uma boa notação e linguagem pra explicação. Não tenho certeza se vale a pena explorar os conceitos dado nessa aula aqui nesse resumo, já que é muito básico e eu conheço todos. Embora, de fato, achei um pouco de novidade na parte de estilo de armazenamento de matrizes. Não esperava que pudesse representar uma matriz como um vetor contínuo com um hack sobre fatiamentos baseado em suas dimensões. Vou deixar um TODO aqui apenas pra eu descrever isso posteriormente. 2 Tipos de alocações de Matrizes Os tipos de alocações de matrizes e sua representações na memória podem ser feitas através de: 1. Matriz como um vetor contíguo 2. Matriz como um vetor de ponteiros Para o caso 1., esta é a maneira como a alocação estática de matrizes é feita através da sintaxe de declaração: 1 int matrix[3][4]; É possível alocar memória dinamicamente dessa maneira: 1 int n, m; 2 int *matrix = (int) malloc(sizeof(int)*n*m)); No entanto, durante o acesso dos índices [n][m] uma tradução do compi- lador é feita, no caso estático, através de: matrix[i][j] -> matrix[i*m + j]. O que pode-se ver que uma matriz é, nesse caso, um fatiamento de um vetor em passos de m — que para nossa informação é o número de colunas. 2 No entanto fazendo alocação dinâmica, eu preciso fazer essa tradução manualmente, pois na declaração do tipo o compilador não sabe que na verdade o que declaro como vetor é na verdade uma matriz. Tudo é uma questão de como abstrair esses dados. Para o caso 2., temos algo um pouco mais sofisticado trabalhando com ponteiros de ponteiros. Essas notas vou deixar para o arquivo seguinte, 1-tipos-estruturados.org. Uma implementação dos conceitos referentes aqui, sobre tipos de alocação para matrizes, está escrito no arquivo src/matrix.c 3 Resumo Tipos de alocações de Matrizes
Compartilhar