SlideShare uma empresa Scribd logo
1 de 16
Baixar para ler offline
Ponteiros
Alocac¸ ˜ao Dinˆamica de Vetores
Alocac¸ ˜ao Dinˆamica de Estruturas
Exerc´ıcios
Linguagem C: Ponteiros - Alocac¸ ˜ao Dinˆamica
Prof. Paulo R. S. L. Coelho
paulo@facom.ufu.br
Faculdade de Computac¸ ˜ao
Universidade Federal de Uberlˆandia
GEQ007
Prof. Paulo Coelho Linguagem C: Ponteiros - Alocac¸ ˜ao Dinˆamica
Ponteiros
Alocac¸ ˜ao Dinˆamica de Vetores
Alocac¸ ˜ao Dinˆamica de Estruturas
Exerc´ıcios
Organizac¸ ˜ao
1 Ponteiros
Alocac¸ ˜ao Dinˆamica de Mem´oria
2 Alocac¸ ˜ao Dinˆamica de Vetores
3 Alocac¸ ˜ao Dinˆamica de Estruturas
4 Exerc´ıcios
Prof. Paulo Coelho Linguagem C: Ponteiros - Alocac¸ ˜ao Dinˆamica
Ponteiros
Alocac¸ ˜ao Dinˆamica de Vetores
Alocac¸ ˜ao Dinˆamica de Estruturas
Exerc´ıcios
Alocac¸ ˜ao Dinˆamica de Mem´oria
Organizac¸ ˜ao
1 Ponteiros
Alocac¸ ˜ao Dinˆamica de Mem´oria
2 Alocac¸ ˜ao Dinˆamica de Vetores
3 Alocac¸ ˜ao Dinˆamica de Estruturas
4 Exerc´ıcios
Prof. Paulo Coelho Linguagem C: Ponteiros - Alocac¸ ˜ao Dinˆamica
Ponteiros
Alocac¸ ˜ao Dinˆamica de Vetores
Alocac¸ ˜ao Dinˆamica de Estruturas
Exerc´ıcios
Alocac¸ ˜ao Dinˆamica de Mem´oria
Alocac¸ ˜ao Dinˆamica de Mem´oria I
Utilizado quando se deseja alocar espac¸o para vari´avel em
tempo de execuc¸ ˜ao.
Utilizado principalmente para vari´aveis indexadas (vetores
e matrizes) e estruturas.
A vari´avel deve ser do tipo ponteiro.
A reserva de mem´oria pode ser feita pelo uso da func¸ ˜ao
malloc(), pertencente `a biblioteca stdlib.h.
Essa func¸ ˜ao recebe como parˆametro o n´umero de bytes a
ser reservado.
A regi˜ao de mem´oria ocupada pelo programa destinada a
alocac¸ ˜oes dinˆamicas ´e denominada heap.
Prof. Paulo Coelho Linguagem C: Ponteiros - Alocac¸ ˜ao Dinˆamica
Ponteiros
Alocac¸ ˜ao Dinˆamica de Vetores
Alocac¸ ˜ao Dinˆamica de Estruturas
Exerc´ıcios
Alocac¸ ˜ao Dinˆamica de Mem´oria
Alocac¸ ˜ao Dinˆamica de Mem´oria II
A reserva ´e feita nessa regi˜ao, ocupando o n´umero de
bytes passado pela func¸ ˜ao, em enderec¸os cont´ıguos.
A func¸ ˜ao retorna o enderec¸o do 1o byte reservado.
A vari´avel ponteiro alvo da alocac¸ ˜ao deve receber esse
valor retornado.
Programa Vizinho
Programa Vizinho
Variáveis Globais
Instr. de Máquina
Área de Dados
das Funções
Área Desocupada
Área heap já ocupada
com aloc. dinâmicas
Layout de um programa na mem´oria
Prof. Paulo Coelho Linguagem C: Ponteiros - Alocac¸ ˜ao Dinˆamica
Ponteiros
Alocac¸ ˜ao Dinˆamica de Vetores
Alocac¸ ˜ao Dinˆamica de Estruturas
Exerc´ıcios
Organizac¸ ˜ao
1 Ponteiros
Alocac¸ ˜ao Dinˆamica de Mem´oria
2 Alocac¸ ˜ao Dinˆamica de Vetores
3 Alocac¸ ˜ao Dinˆamica de Estruturas
4 Exerc´ıcios
Prof. Paulo Coelho Linguagem C: Ponteiros - Alocac¸ ˜ao Dinˆamica
Alocac¸ ˜ao Dinˆamica de Vetores 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];
Alocac¸ ˜ao Dinˆamica de Vetores II
for (i = 0; i < m; i++)
printf("%d ", C[i]);
return 0;
}
Observe que foram utilizadas 900 posic¸ ˜oes de mem´oria
antes mesmo que o valor de m seja conhecido. Se m = 2,
por exemplo, estamos ”desperdic¸ando” 894 posic¸ ˜oes.
A alocac¸ ˜ao dinˆamica permite criar o vetor somente ap´os
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));
Alocac¸ ˜ao Dinˆamica de Vetores 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;
}
Alocac¸ ˜ao Dinˆamica de Vetores IV
Na atribuic¸ ˜ao:
A = (int *) malloc (m * sizeof(int));
A func¸ ˜ao malloc() reserva um espac¸o cont´ıguo de
m*sizeof(int) bytes e retorna o enderec¸o inicial desse
espac¸o.
Assim, a partir desse momento, a vari´avel A passa a atuar
como uma vari´avel indexada (vetor) comum.
O fator de convers˜ao (int *) deve ser usado, uma vez
que o ponteiro retornado por essa func¸ ˜ao n˜ao tem tipo.
Por fim, a func¸ ˜ao free() libera a mem´oria reservada e
apontada pelo ponteiro passado como argumento.
Ponteiros
Alocac¸ ˜ao Dinˆamica de Vetores
Alocac¸ ˜ao Dinˆamica de Estruturas
Exerc´ıcios
Organizac¸ ˜ao
1 Ponteiros
Alocac¸ ˜ao Dinˆamica de Mem´oria
2 Alocac¸ ˜ao Dinˆamica de Vetores
3 Alocac¸ ˜ao Dinˆamica de Estruturas
4 Exerc´ıcios
Prof. Paulo Coelho Linguagem C: Ponteiros - Alocac¸ ˜ao Dinˆamica
Alocac¸ ˜ao Dinˆamica de Estruturas I
Estruturas tamb´em 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 espac¸o para uma estrutura st, cujo enderec¸o ´e
atribu´ıdo `a vari´avel p.
Alocac¸ ˜ao Dinˆamica de Estruturas II
As seguintes atribuic¸ ˜oes 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 atribuic¸ ˜oes anteriores podem ser
expressas da seguinte maneira:
p->a = 2; p->b = 3.4;
ou seja, (*p). pode ser substitu´ıdo por p->
Ponteiros
Alocac¸ ˜ao Dinˆamica de Vetores
Alocac¸ ˜ao Dinˆamica de Estruturas
Exerc´ıcios
Organizac¸ ˜ao
1 Ponteiros
Alocac¸ ˜ao Dinˆamica de Mem´oria
2 Alocac¸ ˜ao Dinˆamica de Vetores
3 Alocac¸ ˜ao Dinˆamica de Estruturas
4 Exerc´ıcios
Prof. Paulo Coelho Linguagem C: Ponteiros - Alocac¸ ˜ao Dinˆamica
Ponteiros
Alocac¸ ˜ao Dinˆamica de Vetores
Alocac¸ ˜ao Dinˆamica de Estruturas
Exerc´ıcios
Exerc´ıcios I
1 Fac¸a um programa que leia o tamanho de um vetor de
inteiros e reserve dinamicamente mem´oria para esse
vetor. Em seguida, leia os elementos desse vetor, imprima
o vetor lido e mostre o resultado da soma dos n´umeros
´ımpares presentes no vetor.
2 Fac¸a um programa que crie uma estrutura
hidrocarboneto com os campos C e H como inteiros
correspondentes `a quantidade de carbonos e hidrogˆenios,
respectivamente.
A func¸ ˜ao principal deve alocar dinamicamente uma
vari´avel do tipo hidrocarboneto. Em seguida, devem
ser lidas as quantidades de carbonos e hidrogˆenios e
impressa a massa atˆomica do composto.
Prof. Paulo Coelho Linguagem C: Ponteiros - Alocac¸ ˜ao Dinˆamica
Ponteiros
Alocac¸ ˜ao Dinˆamica de Vetores
Alocac¸ ˜ao Dinˆamica de Estruturas
Exerc´ıcios
Exerc´ıcios II
3 Considere a seguinte estrutura:
typedef struct aluno aluno;
struct aluno {
char nome[30];
float media;
int faltas;
};
Fac¸a um programa que leia informac¸ ˜oes de n alunos em
um vetor alocado dinamicamente. Em seguida, imprima as
informac¸ ˜oes lidas na ordem decrescente das m´edias dos
alunos.
Prof. Paulo Coelho Linguagem C: Ponteiros - Alocac¸ ˜ao Dinˆamica

Mais conteúdo relacionado

Destaque

Y'ems Group's Social Networking for Organizations Ver 1.0
Y'ems Group's Social Networking for Organizations Ver 1.0Y'ems Group's Social Networking for Organizations Ver 1.0
Y'ems Group's Social Networking for Organizations Ver 1.0Y'ems GroupCo
 
Patrimonio urbano imagenes
Patrimonio urbano imagenesPatrimonio urbano imagenes
Patrimonio urbano imagenesvanessavergara18
 
Sixth sense technology
Sixth sense technologySixth sense technology
Sixth sense technologyBhagya Shree
 
Re-Emerging Human Viral Hemorrhagic Fevers
Re-Emerging Human Viral Hemorrhagic FeversRe-Emerging Human Viral Hemorrhagic Fevers
Re-Emerging Human Viral Hemorrhagic FeversJoshua Owolabi
 
01 a-salinan-permendikbud-no-54-tahun-2013-ttg-skl
01 a-salinan-permendikbud-no-54-tahun-2013-ttg-skl01 a-salinan-permendikbud-no-54-tahun-2013-ttg-skl
01 a-salinan-permendikbud-no-54-tahun-2013-ttg-sklkb candipuro
 
Arrangement of figures By Neha Arora
Arrangement of figures By Neha AroraArrangement of figures By Neha Arora
Arrangement of figures By Neha AroraNEHA ARORA
 
Isolation and characterization of zinc resistant bacteria from a coil coating...
Isolation and characterization of zinc resistant bacteria from a coil coating...Isolation and characterization of zinc resistant bacteria from a coil coating...
Isolation and characterization of zinc resistant bacteria from a coil coating...Joshua Owolabi
 
get cash for surveys
get cash for surveysget cash for surveys
get cash for surveysroger carter
 
Tips for throwing a DIY Birthday party
Tips for throwing a  DIY Birthday partyTips for throwing a  DIY Birthday party
Tips for throwing a DIY Birthday partyY'ems GroupCo
 
Auto con piloto automatico
Auto con piloto automaticoAuto con piloto automatico
Auto con piloto automaticosonia_mq
 
How to Do the Carb Nite Dieting
How to Do the Carb Nite DietingHow to Do the Carb Nite Dieting
How to Do the Carb Nite Dietingroger carter
 
Linked in Master
Linked in MasterLinked in Master
Linked in MasterSimon Dear
 
music magazine evaluation
music magazine evaluation music magazine evaluation
music magazine evaluation gmorgan1996
 
We Create KC Year 3
We Create KC Year 3We Create KC Year 3
We Create KC Year 3Sarah Mote
 

Destaque (18)

Y'ems Group's Social Networking for Organizations Ver 1.0
Y'ems Group's Social Networking for Organizations Ver 1.0Y'ems Group's Social Networking for Organizations Ver 1.0
Y'ems Group's Social Networking for Organizations Ver 1.0
 
Patrimonio urbano imagenes
Patrimonio urbano imagenesPatrimonio urbano imagenes
Patrimonio urbano imagenes
 
Castillos medievales
Castillos medievalesCastillos medievales
Castillos medievales
 
Sixth sense technology
Sixth sense technologySixth sense technology
Sixth sense technology
 
Re-Emerging Human Viral Hemorrhagic Fevers
Re-Emerging Human Viral Hemorrhagic FeversRe-Emerging Human Viral Hemorrhagic Fevers
Re-Emerging Human Viral Hemorrhagic Fevers
 
01 a-salinan-permendikbud-no-54-tahun-2013-ttg-skl
01 a-salinan-permendikbud-no-54-tahun-2013-ttg-skl01 a-salinan-permendikbud-no-54-tahun-2013-ttg-skl
01 a-salinan-permendikbud-no-54-tahun-2013-ttg-skl
 
Arrangement of figures By Neha Arora
Arrangement of figures By Neha AroraArrangement of figures By Neha Arora
Arrangement of figures By Neha Arora
 
Isolation and characterization of zinc resistant bacteria from a coil coating...
Isolation and characterization of zinc resistant bacteria from a coil coating...Isolation and characterization of zinc resistant bacteria from a coil coating...
Isolation and characterization of zinc resistant bacteria from a coil coating...
 
Actividad 7
Actividad 7Actividad 7
Actividad 7
 
get cash for surveys
get cash for surveysget cash for surveys
get cash for surveys
 
Tips for throwing a DIY Birthday party
Tips for throwing a  DIY Birthday partyTips for throwing a  DIY Birthday party
Tips for throwing a DIY Birthday party
 
Powerpoint
PowerpointPowerpoint
Powerpoint
 
Auto con piloto automatico
Auto con piloto automaticoAuto con piloto automatico
Auto con piloto automatico
 
How to Do the Carb Nite Dieting
How to Do the Carb Nite DietingHow to Do the Carb Nite Dieting
How to Do the Carb Nite Dieting
 
Linked in Master
Linked in MasterLinked in Master
Linked in Master
 
music magazine evaluation
music magazine evaluation music magazine evaluation
music magazine evaluation
 
Injection sql
Injection sqlInjection sql
Injection sql
 
We Create KC Year 3
We Create KC Year 3We Create KC Year 3
We Create KC Year 3
 

Semelhante a Ponteiros2

Aula 13 ponteiros - Programação 1
Aula 13 ponteiros - Programação 1Aula 13 ponteiros - Programação 1
Aula 13 ponteiros - Programação 1Isaac Barros
 
Alocação Dinâmica em Linguagem C
Alocação Dinâmica em Linguagem CAlocação Dinâmica em Linguagem C
Alocação Dinâmica em Linguagem CGlécio Rodrigues
 
Aula 12 funcoes - Programação 1
Aula 12 funcoes - Programação 1Aula 12 funcoes - Programação 1
Aula 12 funcoes - Programação 1Isaac Barros
 
Capítulo 14 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 14 Livro Algoritmos e Programação de Computadores Autores JR., Diler...Capítulo 14 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 14 Livro Algoritmos e Programação de Computadores Autores JR., Diler...Os Fantasmas !
 
Apostila de-introdução-à-linguagem-c
Apostila de-introdução-à-linguagem-cApostila de-introdução-à-linguagem-c
Apostila de-introdução-à-linguagem-cMaicon Rodrigues
 
Strings, Arrays e Manipulação Datas em PHP
Strings, Arrays e Manipulação Datas em PHPStrings, Arrays e Manipulação Datas em PHP
Strings, Arrays e Manipulação Datas em PHPDaniel Arndt Alves
 
Exercícios de programação orientado a objeto
Exercícios de programação orientado a objetoExercícios de programação orientado a objeto
Exercícios de programação orientado a objetoGleyciana Garrido
 
Palestra python
Palestra pythonPalestra python
Palestra pythonRony Cruch
 
Simpósio Unicruz: OpenCV + Python (parte 1)
Simpósio Unicruz: OpenCV + Python (parte 1)Simpósio Unicruz: OpenCV + Python (parte 1)
Simpósio Unicruz: OpenCV + Python (parte 1)Cristiano Rafael Steffens
 
Atividade programação script 4
Atividade programação script 4Atividade programação script 4
Atividade programação script 4Rtec Informatica
 
Aula 10 arrays - Programação 1
Aula 10 arrays - Programação 1Aula 10 arrays - Programação 1
Aula 10 arrays - Programação 1Isaac Barros
 
Aula 1 - Programação 1
Aula 1 - Programação 1Aula 1 - Programação 1
Aula 1 - Programação 1Isaac Barros
 
Tecnicas programacao i_c_p3
Tecnicas programacao i_c_p3Tecnicas programacao i_c_p3
Tecnicas programacao i_c_p3D M
 
A linguagem de programação c
A linguagem de programação cA linguagem de programação c
A linguagem de programação cClausia Antoneli
 

Semelhante a Ponteiros2 (20)

Aula 13 ponteiros - Programação 1
Aula 13 ponteiros - Programação 1Aula 13 ponteiros - Programação 1
Aula 13 ponteiros - Programação 1
 
Aula 1 | Introdução a C++
Aula 1 | Introdução a C++Aula 1 | Introdução a C++
Aula 1 | Introdução a C++
 
Alocação Dinâmica em Linguagem C
Alocação Dinâmica em Linguagem CAlocação Dinâmica em Linguagem C
Alocação Dinâmica em Linguagem C
 
Aula 12 funcoes - Programação 1
Aula 12 funcoes - Programação 1Aula 12 funcoes - Programação 1
Aula 12 funcoes - Programação 1
 
Capítulo 14 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 14 Livro Algoritmos e Programação de Computadores Autores JR., Diler...Capítulo 14 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 14 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
 
Introducao ao C#
Introducao ao C#Introducao ao C#
Introducao ao C#
 
Linguagem C clecioamerico
Linguagem C clecioamericoLinguagem C clecioamerico
Linguagem C clecioamerico
 
Apostila de-introdução-à-linguagem-c
Apostila de-introdução-à-linguagem-cApostila de-introdução-à-linguagem-c
Apostila de-introdução-à-linguagem-c
 
Strings, Arrays e Manipulação Datas em PHP
Strings, Arrays e Manipulação Datas em PHPStrings, Arrays e Manipulação Datas em PHP
Strings, Arrays e Manipulação Datas em PHP
 
Exercícios de programação orientado a objeto
Exercícios de programação orientado a objetoExercícios de programação orientado a objeto
Exercícios de programação orientado a objeto
 
Palestra python
Palestra pythonPalestra python
Palestra python
 
Modulo02
Modulo02Modulo02
Modulo02
 
Simpósio Unicruz: OpenCV + Python (parte 1)
Simpósio Unicruz: OpenCV + Python (parte 1)Simpósio Unicruz: OpenCV + Python (parte 1)
Simpósio Unicruz: OpenCV + Python (parte 1)
 
Atividade programação script 4
Atividade programação script 4Atividade programação script 4
Atividade programação script 4
 
Aula 10 arrays - Programação 1
Aula 10 arrays - Programação 1Aula 10 arrays - Programação 1
Aula 10 arrays - Programação 1
 
Ativ complementar etapa 02
Ativ complementar etapa 02Ativ complementar etapa 02
Ativ complementar etapa 02
 
POO - Aula 003
POO - Aula 003POO - Aula 003
POO - Aula 003
 
Aula 1 - Programação 1
Aula 1 - Programação 1Aula 1 - Programação 1
Aula 1 - Programação 1
 
Tecnicas programacao i_c_p3
Tecnicas programacao i_c_p3Tecnicas programacao i_c_p3
Tecnicas programacao i_c_p3
 
A linguagem de programação c
A linguagem de programação cA linguagem de programação c
A linguagem de programação c
 

Ponteiros2

  • 1. Ponteiros Alocac¸ ˜ao Dinˆamica de Vetores Alocac¸ ˜ao Dinˆamica de Estruturas Exerc´ıcios Linguagem C: Ponteiros - Alocac¸ ˜ao Dinˆamica Prof. Paulo R. S. L. Coelho paulo@facom.ufu.br Faculdade de Computac¸ ˜ao Universidade Federal de Uberlˆandia GEQ007 Prof. Paulo Coelho Linguagem C: Ponteiros - Alocac¸ ˜ao Dinˆamica
  • 2. Ponteiros Alocac¸ ˜ao Dinˆamica de Vetores Alocac¸ ˜ao Dinˆamica de Estruturas Exerc´ıcios Organizac¸ ˜ao 1 Ponteiros Alocac¸ ˜ao Dinˆamica de Mem´oria 2 Alocac¸ ˜ao Dinˆamica de Vetores 3 Alocac¸ ˜ao Dinˆamica de Estruturas 4 Exerc´ıcios Prof. Paulo Coelho Linguagem C: Ponteiros - Alocac¸ ˜ao Dinˆamica
  • 3. Ponteiros Alocac¸ ˜ao Dinˆamica de Vetores Alocac¸ ˜ao Dinˆamica de Estruturas Exerc´ıcios Alocac¸ ˜ao Dinˆamica de Mem´oria Organizac¸ ˜ao 1 Ponteiros Alocac¸ ˜ao Dinˆamica de Mem´oria 2 Alocac¸ ˜ao Dinˆamica de Vetores 3 Alocac¸ ˜ao Dinˆamica de Estruturas 4 Exerc´ıcios Prof. Paulo Coelho Linguagem C: Ponteiros - Alocac¸ ˜ao Dinˆamica
  • 4. Ponteiros Alocac¸ ˜ao Dinˆamica de Vetores Alocac¸ ˜ao Dinˆamica de Estruturas Exerc´ıcios Alocac¸ ˜ao Dinˆamica de Mem´oria Alocac¸ ˜ao Dinˆamica de Mem´oria I Utilizado quando se deseja alocar espac¸o para vari´avel em tempo de execuc¸ ˜ao. Utilizado principalmente para vari´aveis indexadas (vetores e matrizes) e estruturas. A vari´avel deve ser do tipo ponteiro. A reserva de mem´oria pode ser feita pelo uso da func¸ ˜ao malloc(), pertencente `a biblioteca stdlib.h. Essa func¸ ˜ao recebe como parˆametro o n´umero de bytes a ser reservado. A regi˜ao de mem´oria ocupada pelo programa destinada a alocac¸ ˜oes dinˆamicas ´e denominada heap. Prof. Paulo Coelho Linguagem C: Ponteiros - Alocac¸ ˜ao Dinˆamica
  • 5. Ponteiros Alocac¸ ˜ao Dinˆamica de Vetores Alocac¸ ˜ao Dinˆamica de Estruturas Exerc´ıcios Alocac¸ ˜ao Dinˆamica de Mem´oria Alocac¸ ˜ao Dinˆamica de Mem´oria II A reserva ´e feita nessa regi˜ao, ocupando o n´umero de bytes passado pela func¸ ˜ao, em enderec¸os cont´ıguos. A func¸ ˜ao retorna o enderec¸o do 1o byte reservado. A vari´avel ponteiro alvo da alocac¸ ˜ao deve receber esse valor retornado. Programa Vizinho Programa Vizinho Variáveis Globais Instr. de Máquina Área de Dados das Funções Área Desocupada Área heap já ocupada com aloc. dinâmicas Layout de um programa na mem´oria Prof. Paulo Coelho Linguagem C: Ponteiros - Alocac¸ ˜ao Dinˆamica
  • 6. Ponteiros Alocac¸ ˜ao Dinˆamica de Vetores Alocac¸ ˜ao Dinˆamica de Estruturas Exerc´ıcios Organizac¸ ˜ao 1 Ponteiros Alocac¸ ˜ao Dinˆamica de Mem´oria 2 Alocac¸ ˜ao Dinˆamica de Vetores 3 Alocac¸ ˜ao Dinˆamica de Estruturas 4 Exerc´ıcios Prof. Paulo Coelho Linguagem C: Ponteiros - Alocac¸ ˜ao Dinˆamica
  • 7. Alocac¸ ˜ao Dinˆamica de Vetores 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];
  • 8. Alocac¸ ˜ao Dinˆamica de Vetores II for (i = 0; i < m; i++) printf("%d ", C[i]); return 0; } Observe que foram utilizadas 900 posic¸ ˜oes de mem´oria antes mesmo que o valor de m seja conhecido. Se m = 2, por exemplo, estamos ”desperdic¸ando” 894 posic¸ ˜oes. A alocac¸ ˜ao dinˆamica permite criar o vetor somente ap´os 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));
  • 9. Alocac¸ ˜ao Dinˆamica de Vetores 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; }
  • 10. Alocac¸ ˜ao Dinˆamica de Vetores IV Na atribuic¸ ˜ao: A = (int *) malloc (m * sizeof(int)); A func¸ ˜ao malloc() reserva um espac¸o cont´ıguo de m*sizeof(int) bytes e retorna o enderec¸o inicial desse espac¸o. Assim, a partir desse momento, a vari´avel A passa a atuar como uma vari´avel indexada (vetor) comum. O fator de convers˜ao (int *) deve ser usado, uma vez que o ponteiro retornado por essa func¸ ˜ao n˜ao tem tipo. Por fim, a func¸ ˜ao free() libera a mem´oria reservada e apontada pelo ponteiro passado como argumento.
  • 11. Ponteiros Alocac¸ ˜ao Dinˆamica de Vetores Alocac¸ ˜ao Dinˆamica de Estruturas Exerc´ıcios Organizac¸ ˜ao 1 Ponteiros Alocac¸ ˜ao Dinˆamica de Mem´oria 2 Alocac¸ ˜ao Dinˆamica de Vetores 3 Alocac¸ ˜ao Dinˆamica de Estruturas 4 Exerc´ıcios Prof. Paulo Coelho Linguagem C: Ponteiros - Alocac¸ ˜ao Dinˆamica
  • 12. Alocac¸ ˜ao Dinˆamica de Estruturas I Estruturas tamb´em 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 espac¸o para uma estrutura st, cujo enderec¸o ´e atribu´ıdo `a vari´avel p.
  • 13. Alocac¸ ˜ao Dinˆamica de Estruturas II As seguintes atribuic¸ ˜oes 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 atribuic¸ ˜oes anteriores podem ser expressas da seguinte maneira: p->a = 2; p->b = 3.4; ou seja, (*p). pode ser substitu´ıdo por p->
  • 14. Ponteiros Alocac¸ ˜ao Dinˆamica de Vetores Alocac¸ ˜ao Dinˆamica de Estruturas Exerc´ıcios Organizac¸ ˜ao 1 Ponteiros Alocac¸ ˜ao Dinˆamica de Mem´oria 2 Alocac¸ ˜ao Dinˆamica de Vetores 3 Alocac¸ ˜ao Dinˆamica de Estruturas 4 Exerc´ıcios Prof. Paulo Coelho Linguagem C: Ponteiros - Alocac¸ ˜ao Dinˆamica
  • 15. Ponteiros Alocac¸ ˜ao Dinˆamica de Vetores Alocac¸ ˜ao Dinˆamica de Estruturas Exerc´ıcios Exerc´ıcios I 1 Fac¸a um programa que leia o tamanho de um vetor de inteiros e reserve dinamicamente mem´oria para esse vetor. Em seguida, leia os elementos desse vetor, imprima o vetor lido e mostre o resultado da soma dos n´umeros ´ımpares presentes no vetor. 2 Fac¸a um programa que crie uma estrutura hidrocarboneto com os campos C e H como inteiros correspondentes `a quantidade de carbonos e hidrogˆenios, respectivamente. A func¸ ˜ao principal deve alocar dinamicamente uma vari´avel do tipo hidrocarboneto. Em seguida, devem ser lidas as quantidades de carbonos e hidrogˆenios e impressa a massa atˆomica do composto. Prof. Paulo Coelho Linguagem C: Ponteiros - Alocac¸ ˜ao Dinˆamica
  • 16. Ponteiros Alocac¸ ˜ao Dinˆamica de Vetores Alocac¸ ˜ao Dinˆamica de Estruturas Exerc´ıcios Exerc´ıcios II 3 Considere a seguinte estrutura: typedef struct aluno aluno; struct aluno { char nome[30]; float media; int faltas; }; Fac¸a um programa que leia informac¸ ˜oes de n alunos em um vetor alocado dinamicamente. Em seguida, imprima as informac¸ ˜oes lidas na ordem decrescente das m´edias dos alunos. Prof. Paulo Coelho Linguagem C: Ponteiros - Alocac¸ ˜ao Dinˆamica