Linguagem C: Ponteiros - Alocação Dinâmica

Documentos relacionados
Alocação dinâmica de Memória

Exercício. Alocação Dinâmica. Alocação dinâmica de memória. Alocação de memória. Alocação da Memória Principal. Alocação da Memória Principal

Linguagem C: Subprogramação

Alocação Dinâmica em C

Exercícios. Alocação Dinâmica. Alocação dinâmica de memória. Alocação de memória. Alocação da Memória Principal. Alocação da Memória Principal

Alocação Dinâmica. Introdução à Computação

Reinaldo Gomes Alocação Dinâmica

INF 1007 Programação II

Aula 25: Alocação Dinâmica

Módulo 5 Vetores e Alocação Dinâmica

1/34 GESTÃO DINÂMICA DE MEMÓRIA

Alocação Dinâmica de Memória. Programação II

Alocação de Memória. Lucas Ferrari de Oliveira Professor Adjunto Universidade Federal do Paraná (UFPR)

CES-11. Algoritmos e Estruturas de Dados. Carlos Alberto Alonso Sanches Juliana de Melo Bezerra

Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica

Introdução à Ciência da Computação I. Alocação Dinâmica. Prof. Claudio Fabiano Motta Toledo

Ponteiros - Parte I. Ponteiros, Ponteiros e Vetores, Algoritmo Bubble Sort, Alocação Dinâmica de Memória

Ponteiros em C. Prof. Rui Jorge Tramontin Jr. UDESC - Rui J. Tramontin Jr. 1

Ponteiros. Baseado nos slides do Prof. Mauro.

REVISÃO DE C. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

PONTEIROS E LISTAS. Kalinka Regina Lucas Jaquie Castelo Branco

1 Exercícios com ponteiros

Linguagem C. Ponteiros. Alex Vidigal Bastos.

Princípios de Desenvolvimento de Algoritmos MAC122

MC-102 Aula 19 Ponteiros II

Estruturas de Dados. Introdução Definição de Ponteiros Declaração de Ponteiros em C Manipulação de Ponteiros em C

INF1007: Programação 2. 2 Alocação Dinâmica. 17/02/2014 (c) Dept. Informática - PUC-Rio 1

Programação de Computadores II

Algoritmos e Estruturas de Dados. Prof. Marcelo Zorzan Profa. Melissa Zanatta

Introdução a Programação. Ponteiros e Vetores, Alocação Dinâmica

13. ALOCAÇÃO DINÂMICA DE MEMÓRIA

Algoritmos e Estruturas de dados

AULA 6. Conceitos. Melhores momentos. Conceitos. Conceitos. Conceitos. Conceitos

Linguagem C: Arquivo-Texto

Programação II. Vetores e Alocação Dinâmica. Bruno Feijó Dept. de Informática, PUC-Rio

ALGORITMOS E ESTRUTURAS DE DADOS CES-11

Ponteiros e Alocação Dinâmica. Prof. Péricles Miranda

Alocação Estática e Dinâmica. Prof. M.Sc. Mariella Berger

Métodos Computacionais. Vetores e Matrizes Dinâmicas

Linguagem C: Listas Encadeadas

Laboratório de Introdução à Ciência da Computação I

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: ponteiros e alocação dinâmica

Ponteiros e alocação dinâmica de memória. Disciplina de Programação de Computadores I Universidade Federal de Ouro Preto

Ponteiros. Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista

Aula 24 Ponteiros, vetores e structs

Estruturas dinâmicas Ponteiros

ALGORITMOS E ESRUTRA DE DADOS I. Ponteiros Passagem por Valor e Referência Alocação de Memória

Programação de Computadores II. Cap. 5 Alocação Dinâmica

DAS5102 Fundamentos da Estrutura da Informação

Estruturas de Dados. Profa. Juliana Pinheiro Campos

A linguagem C permite dois tipos de alocação de memória: Alocação estática e alocação dinâmica.

Aula 17: Ponteiros e Alocação Dinâmica em C

5. Vetores e alocação dinâmica

Ponteiros e Alocação de Memória

Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP. Alocação Dinâmica de Memória

BCC202 - Estrutura de Dados I

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA RIO GRANDE DO NORTE

Programação II. Vetores e Alocação Dinâmica. Bruno Feijó Dept. de Informática, PUC-Rio

Ponteiro. Ponteiro. Objetivo. Compreender a definição e dominar a implementação de ponteiros em C.

Ponteiros, ponteiros e vetores e alocação dinâmica de memória

Apontadores/ponteiros

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

Programação de Computadores II Lista de Exercícios 03

SSC304 Introdução à Programação Para Engenharias. Alocação Dinâmica. GE4 Bio

Ponteiros. Introdução e Alocação Dinâmica

MC-102 Aula 21 Registros

ESTRUTURAS DE DADOS (LEI, LM, LEE) PROGRAMAÇÃO III (LTSI) Universidade da Beira Interior, Departamento de Informática Hugo Pedro Proença, 2017/2018

Programação Estruturada Prof. Rodrigo Hausen Organização e Gerenciamento de Memória

Ponteiros e Tabelas. K&R: Capitulo 5 IAED, 2012/2013

Ponteiros e Tabelas. K&R: Capitulo 5 IAED, 2012/2013

Alocação Dinâmica em C

3. Linguagem de Programação C

A sintaxe para se declarar uma variável do tipo ponteiro é dada por:

Estruturas Dinâmicas - Ponteiros

Ponteiros & tabelas (cont.) K&R: Capítulo 5

INF 1007 Programação II

1 Exercícios com ponteiros

Computação I - C Prova /10/ Profs. Adriano Cruz e Valeria Bastos

O que é um apontador em C (type pointer in C)?

Programação II. Vetores Bidimensionais e Vetores de Ponteiros. Bruno Feijó Dept. de Informática, PUC-Rio

Gilberto A. S. Segundo. 24 de agosto de 2011

Módulo 8 Tipos Estruturados

Exercícios sobre textos; Alocação dinâmica.

Suponha um conjunto habitacional, com várias famílias... imagina se todas elas morassem em uma única casa?

Programação de Computadores II. Cap. 5 Vetores

Programação de Computadores II

Ponteiros. Embora o programador não tenha acesso ao endereço de uma variável, existem algumas situações onde é necessário a utilização deste endereço.

Programação. Cap. 12 Gestão de Memória Dinâmica

Introdução à Computação

INF1007: Programação 2. 4 Tipos Estruturados. 10/23/09 (c) Dept. Informática - PUC-Rio 1

INF 1007 Programação II

Sumário. Introdução à Ciência da Computação. Ponteiros em C. Introdução. Definição. Por quê ponteiros são importantes?

Estrutura de Dados. Aula 07 Alocação Dinâmica

Aula 24: Ponteiros e Alocação Dinâmica

Função "malloc" e "calloc":

INF 1620 P1-04/10/03 Questão 1 Nome:

Estruturas de Dados Aulas 3 e 4: Uso da. 14/03/2011 e 16/03/2011

Transcrição:

Prof. Paulo R. S. L. Coelho paulo@facom.ufu.br Faculdade de Computação Universidade Federal de Uberlândia GEQ007

Organização 1 Ponteiros Alocação Dinâmica de Memória 2 3 4

Organização Ponteiros Alocação Dinâmica de Memória 1 Ponteiros Alocação Dinâmica de Memória 2 3 4

Alocação Dinâmica de Memória I Alocação Dinâmica de Memória Utilizado quando se deseja alocar espaço para variável em tempo de execução. Utilizado principalmente para variáveis indexadas (vetores e matrizes) e estruturas. A variável deve ser do tipo ponteiro. A reserva de memória pode ser feita pelo uso da função malloc(), pertencente à biblioteca stdlib.h. Essa função recebe como parâmetro o número de bytes a ser reservado. A região de memória ocupada pelo programa destinada a alocações dinâmicas é denominada heap.

Alocação Dinâmica de Memória II Alocação Dinâmica de Memória A reserva é feita nessa região, ocupando o número de bytes passado pela função, em endereços contíguos. A função retorna o endereço do 1 o byte reservado. A variável ponteiro alvo da alocação deve receber esse valor retornado. Programa Vizinho Instr. de Máquina Variáveis Globais Área de Dados das Funções Área Desocupada Área heap já ocupada com aloc. dinâmicas Programa Vizinho Layout de um programa na memória

Organização 1 Ponteiros Alocação Dinâmica de Memória 2 3 4

I Considere o seguinte exemplo: #include <stdio.h> #include <stdlib.h> int main() { int m, A[300], B[300], C[300]; printf("entre tamanho dos vetores: "); scanf("%d", &m); printf("\nvetor A: "); for (i = 0; i < m; i++) scanf("%d", &A[i]); printf("\nvetor B: "); for (i = 0; i < m; i++) scanf("%d", &B[i]); printf("\nvetor C: "); for (i = 0; i < m; i++) C[i] = A[i] > B[i]? A[i] : B[i];

II } for (i = 0; i < m; i++) printf("%d ", C[i]); return 0; Observe que foram utilizadas 900 posições de memória antes mesmo que o valor de m seja conhecido. Se m = 2, por exemplo, estamos desperdiçando 894 posições. A alocação dinâmica permite criar o vetor somente após conhecermos seu real tamanho: #include <stdio.h> #include <stdlib.h> int main() { int m, *A, *B, *C; printf("entre tamanho dos vetores: "); scanf("%d", &m); A = (int *) malloc(m * sizeof(int)); B = (int *) malloc(m * sizeof(int));

III } C = (int *) malloc(m * sizeof(int)); printf("\nvetor A: "); for (i = 0; i < m; i++) scanf("%d", &A[i]); printf("\nvetor B: "); for (i = 0; i < m; i++) scanf("%d", &B[i]); printf("\nvetor C: "); for (i = 0; i < m; i++) C[i] = A[i] > B[i]? A[i] : B[i]; for (i = 0; i < m; i++) printf("%d ", C[i]); free(a); free(b); free(c); return 0;

IV Na atribuição: A = (int *) malloc (m * sizeof(int)); A função malloc() reserva um espaço contíguo de m*sizeof(int) bytes e retorna o endereço inicial desse espaço. Assim, a partir desse momento, a variável A passa a atuar como uma variável indexada (vetor) comum. O fator de conversão (int *) deve ser usado, uma vez que o ponteiro retornado por essa função não tem tipo. Por fim, a função free() libera a memória reservada e apontada pelo ponteiro passado como argumento.

Organização 1 Ponteiros Alocação Dinâmica de Memória 2 3 4

I Estruturas também podem ser alocadas dinamicamente. Por exemplo, considere a seguinte estrutura: typedef struct st st; struct st { int a; float b; };... st *p; O comando p = (st *) malloc(sizeof(st)); aloca espaço para uma estrutura st, cujo endereço é atribuído à variável p.

II As seguintes atribuições podem ser feitas aos campos dessa estrutura: (*p).a = 2; (*p).b = 3.4; A linguagem C estabelece outra forma de se referenciar os campos de uma estrutura apontada por um ponteiro. Dessa forma, as atribuições anteriores podem ser expressas da seguinte maneira: p->a = 2; p->b = 3.4; ou seja, (*p). pode ser substituído por p->

Organização 1 Ponteiros Alocação Dinâmica de Memória 2 3 4

I 1 Faça um programa que leia o tamanho de um vetor de inteiros e reserve dinamicamente memória para esse vetor. Em seguida, leia os elementos desse vetor, imprima o vetor lido e mostre o resultado da soma dos números ímpares presentes no vetor. 2 Faça um programa que crie uma estrutura hidrocarboneto com os campos C e H como inteiros correspondentes à quantidade de carbonos e hidrogênios, respectivamente. A função principal deve alocar dinamicamente uma variável do tipo hidrocarboneto. Em seguida, devem ser lidas as quantidades de carbonos e hidrogênios e impressa a massa atômica do composto.

II 3 Considere a seguinte estrutura: typedef struct aluno aluno; struct aluno { char nome[30]; float media; int faltas; }; Faça um programa que leia informações de n alunos em um vetor alocado dinamicamente. Em seguida, imprima as informações lidas na ordem decrescente das médias dos alunos.