Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

Estruturas de Dados I: Ponteiros, Alocação de Memória e Tipos Abstratos de Dados, Notas de aula de Programação em C

Este documento aborda conceitos fundamentais da disciplina de estruturas de dados i, incluindo ponteiros, alocação estática e dinâmica de memória, e tipos abstratos de dados (tad). São discutidos os tipos de ponteiros, operadores de endereço e conteúdo, relação entre ponteiros e vetores, alocação de memória estática e dinâmica, e conceitos de tad, como encapsulamento, segurança, flexibilidade e reutilização. O documento também inclui exemplos e exercícios para aprofundamento dos tópicos.

Tipologia: Notas de aula

2022

Compartilhado em 30/03/2022

otimize-engenharia
otimize-engenharia 🇧🇷

5 documentos

1 / 47

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
ESTRUTURAS DE DADOS I
Prof Me. Fabiana Rocha de Andrade e Silva
fabiana.silva@unialfa.com.br
2022.1
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f

Pré-visualização parcial do texto

Baixe Estruturas de Dados I: Ponteiros, Alocação de Memória e Tipos Abstratos de Dados e outras Notas de aula em PDF para Programação em C, somente na Docsity!

ESTRUTURAS DE DADOS I

Prof.ª Me. Fabiana Rocha de Andrade e Silva fabiana.silva@unialfa.com.br

  1. 1

PONTEIROS

  • Um ponteiro (= apontador = pointer ) é um tipo especial de variável

que armazena endereços.

  • Um ponteiro pode ter o valor especial NULL , que não é endereço de

lugar algum.

  • A constante NULL está definida no arquivo-interface stdlib e seu valor

é 0 na maioria dos computadores.

PONTEIROS

  • Se um ponteiro p tem valor diferente de NULL então *p é o objeto

apontado por p.

PONTEIROS

  • Há vários tipos de ponteiros para caracteres, para inteiros, para

ponteiros para inteiros, ponteiros para registros, etc.

  • Para declarar um ponteiro p para um inteiro, escrevemos: int *p;
  • Para declarar um ponteiro p para uma estrutura ponto, escrevemos:

struct ponto *p;

PONTEIROS

  • Exemplos:

VETORES E ENDEREÇOS

  • Em C, existe uma relação muito grande entre ponteiros e vetores. A

declaração:

int v[ 10 ];

Define um bloco de 10 objetos consecutivos na memória de nomes:

v[ 0 ], v[ 1 ], ..., v[ 9 ]

VETORES E ENDEREÇOS

  • Se p aponta para um elemento do vetor, então p+ 1 aponta para o

elemento seguinte, p+i aponta para o i-ésimo elemento depois de p,

p-i para o i-ésimo elemento antes de p.

  • O significado de “somar 1 a um ponteiro” é que p+ 1 aponta para o

próximo objeto, independente do número de bytes do objeto.

ALOCAÇÃO DE MEMÓRIA

  • Alocação estática de memória
    • Estratégia de alocação de memória na qual toda a memória que um tipo de dados pode vir a necessitar é alocada toda de uma vez sem considerar a quantidade que seria realmente necessária na execução do programa.
    • A quantidade de memória necessária para armazenar as variáveis é automaticamente reservada na stack (pilha) ou em outras seções do programa.
    • O stack guarda os dados alocados dentro dos escopos de funções: variáveis locais, parâmetros, retorno de funções e endereços de outras áreas. Nela, as instruções e dados vão sendo empilhados e o desempilhamento ocorre automaticamente, após a execução.

ALOCAÇÃO DE MEMÓRIA

  • Alocação estática de memória

ALOCAÇÃO DE MEMÓRIA

  • Alocação dinâmica de memória
    • Técnica que aloca a memória sob demanda
    • Essa memória não é mais reservada na stack, mas em outra área de memória, chamada heap.
    • As variáveis armazenadas na heap não dependem do escopo e devem ser liberados manualmente pelo programador.
    • Os endereços podem ser alocados, liberados e realocados para diferentes propósitos, durante a execução do programa.
    • Em C usamos malloc(n) para alocar um bloco de memória de tamanho n bytes.
    • Nesse tipo de alocação, os dados não precisam estar organizados sequencialmente na memória do computador.

ALOCAÇÃO DE MEMÓRIA

  • Alocação dinâmica de memória
    • Endereços não necessariamente contíguos
    • Alocador de memória do SO aloca blocos de memória que estão livres
    • Alocador de memória gerencia espaços ocupados e livres
    • Memória alocada mantém lixo. Temos que inicializar
    • Em C, liberamos a memória usando free(p).
    • As funções malloc e free que gerenciam a alocação dinâmica da memória fazem parte da biblioteca stdlib. #include <stdlib.h>

ALOCAÇÃO DE MEMÓRIA

  • Alocação dinâmica de memória

VETORES/ARRAYS

  • Definição:
    • Podem ser chamados de array ou vetores;
    • É uma estrutura de dado que permite manipular uma coleção de itens do mesmo tipo
    • São de largura fixa (estrutura estática)
    • Trabalham com referência e não são primitivos (estrutura derivada)

VETORES/ARRAYS

  • Ao criar e manipular um array são necessários 3 passos:
    • Declaração
    • Construção
    • Inicialização