SlideShare uma empresa Scribd logo
1 de 21
Baixar para ler offline
Uso do ponteiro void *Uso do ponteiro void *
Prof. Alex Camargo
alexcamargoweb@gmail.com
UNIVERSIDADE FEDERAL DO PAMPA
CAMPUS BAGÉ
LABORATÓRIO DE PROGRAMAÇÃO II
Introdução
Ponteiros são variáveis cujos valores são endereços de
memória. Uma variável de ponteiro é uma variável especialmente
declarada para guardar um ponteiro para seu tipo especificado.
Ponteiros têm 3 funções principais em C:
 fornecer uma maneira rápida de referenciar elementos de um
vetor;
 permitem a modificação de argumentos de funções: variáveis
não globais e não locais a ela;
 oportunizar o uso de alocação e desalocação de memória em
tempo de execução conforme a necessidade do programa.
Laboratório de Programação II – Uso do ponteiro void *
Introdução
A forma de declaração de uma variável ponteiro é:
tipo *nome_variável
Onde tipo é o tipo de variável apontada pela variável ponteiro.
Exemplo:
int *p; //p é um ponteiro de int
Ou seja, p apontará para uma região de memória que armazena
um valor inteiro.
Laboratório de Programação II – Uso do ponteiro void *
Operadores & e *
 O primeiro operador de ponteiro é o &. Ele é um operador
unário que devolve o endereço na memória de seu
operando.
 O segundo operador é o *. Ele é um operador unário que
devolve o valor da variável localizada no endereço que o
segue.
Operadores unários interagem com apenas um elemento (Ex.:
p++ e p--).
Laboratório de Programação II – Uso do ponteiro void *
Operadores & e *
Laboratório de Programação II – Uso do ponteiro void *
Ponteiros e vetores
Em C, ponteiros e vetores estão intimamente relacionados. O
nome de um vetor sem o índice é um ponteiro para o primeiro
elemento do vetor.
Exemplo:
Laboratório de Programação II – Uso do ponteiro void *
Ponteiros e vetores
Sabemos agora que, na verdade, o nome de um vetor é um
ponteiro constante.
Podemos ver que p[2] equivale a *(p+2).
Laboratório de Programação II – Uso do ponteiro void *
Ponteiros na passagem de parâmetros
por referência
Neste contexto, os ponteiros são utilizados para permitir que
seja acessada uma região de memória ocupada por uma variável
não "enxergada" pela função, ou seja, por uma variável fora do
escopo da função.
 Para isso, a função recebe e armazena em variáveis ponteiro o
endereço das variáveis fora do seu escopo.
 Para passarmos uma variável para uma função e fazer com que
ela seja alterada, precisamos passar a referência dessa
variável, em vez de seu valor.
 Para fazer isso, basta colocar o operador & antes do argumento
que vamos enviar, e colocar um asterisco * no parâmetro da
função.
Laboratório de Programação II – Uso do ponteiro void *
Ponteiros na passagem de parâmetros
por referência
Neste contexto, os ponteiros são utilizados para permitir que
seja acessada uma região de memória ocupada por uma variável
não "enxergada" pela função, ou seja, por uma variável fora do
escopo da função.
 Para isso, a função recebe e armazena em variáveis ponteiro o
endereço das variáveis fora do seu escopo.
 Para passarmos uma variável para uma função e fazer com que
ela seja alterada, precisamos passar a referência dessa
variável, em vez de seu valor.
 Para fazer isso, basta colocar o operador & antes do argumento
que vamos enviar, e colocar um asterisco * no parâmetro da
função.
Laboratório de Programação II – Uso do ponteiro void *
Alocação dinâmica de memória
É o meio pelo qual um programa pode obter memória
enquanto está em execução. Ponteiros fornecem o suporte
necessário para o poderoso sistema de alocação dinâmica em C.
Basicamente, utilizamos as seguintes funções (estão no cabeçalho
stdlib.h):
 malloc: aloca memória
 free: libera memória
Laboratório de Programação II – Uso do ponteiro void *
Alocação dinâmica de memória
malloc: aloca memória
(void*) malloc(tamanho em bytes)
 Para que possamos determinar qual o tamanho em bytes que
queremos, utilizamos a função sizeof.
 O retorno de malloc é um ponteiro genérico e deve ser
configurado para o tipo alocado. No entanto, é comum
fazermos a conversão explicitamente, utilizando o operador de
molde de tipo (cast).
Exemplo:
pt = (int*) malloc (sizeof(int));
Laboratório de Programação II – Uso do ponteiro void *
Alocação dinâmica de memória
free: libera memória
free(endereço)
 Você é responsável por liberar a memória que você alocou!
Exemplo:
free(pt);
Laboratório de Programação II – Uso do ponteiro void *
Alocação dinâmica de memória
Um exemplo de desperdício de memória é quando um vetor de 1000
posições é declarado quando não se sabe, de fato, se as 1000 posições
serão necessárias.
Laboratório de Programação II – Uso do ponteiro void *
O tipo void
Antes de falarmos de ponteiros void *, veremos o tipo void. Isso
nos ajudará a entender o comportamento do ponteiro e a
diagnosticar possíveis problemas.
Laboratório de Programação II – Uso do ponteiro void *
O tipo void
O tipo void é uma das exceções das regras de tipo. Todos os
tipos básicos que existem servem para armazenar alguma espécie
de dado definido em um tamanho.
 char: 1 byte
 int: 4 bytes
 float: 4 bytes
 double: 8 bytes
O tipo void possui tamanho igual a 1 byte, mas não serve para
armazenar dados de qualquer tipo.
Laboratório de Programação II – Uso do ponteiro void *
O tipo void
Assim, o tipo void é usado quando não queremos dados
armazenados nele. Esse é um conceito fácil de se entender, pois
em funções que não retornam nada devemos colocar void.
Exemplo:
Laboratório de Programação II – Uso do ponteiro void *
void *
Chamamos de ponteiros vazios qualquer ponteiro que não
possua um tipo de dado específico, ou seja, se seu tipo de dado for
void. Ponteiros vazios são ponteiros genéricos que podem
apontar para qualquer outro tipo de dado, mas trazem consigo
problemas lógicos:
 como são ponteiros vazios, não há um tipo de dado específico;
 não podemos determinar seu tamanho;
 assim como também não podemos dereferenciá-lo
diretamente.
Esses problemas são facilmente resolvidos se induzirmos o endereço
void para o endereço do tipo de dado correto, da mesma forma que
executamos qualquer typecast.
Laboratório de Programação II – Uso do ponteiro void *
void *
Entender o conceito de ponteiros genéricos é de suma
importância:
 para a compreensão de estruturas dinâmicas de memória;
 trabalharemos o tempo todo com funções que retornam
endereços de memória genéricos;
 ou seja, podem ser qualquer tipo de endereço de memória,
portanto sem tipo de dado (void).
Laboratório de Programação II – Uso do ponteiro void *
Laboratório de Programação II – Uso do ponteiro void *
Considerações finais
Um ponteiro genérico é um ponteiro que pode apontar para
qualquer tipo de dado:
 O tipo de dado apontado por um ponteiro genérico deve ser
controlado pelo usuário, usando um type cast (conversão de
tipo).
 Não podemos armazenar nada em tipo void.
 Só se pode armazenar endereços de memória em void*.
Dentre as três regras, as duas primeiras já deveríamos estar
acostumados. A "nova" (a última regra) é o que garante generabilidade
para o tipo void.
Laboratório de Programação II – Uso do ponteiro void *
Exercícios
Responda as questões referentes ao uso do ponteiro void * contidas na
Lista de Exercícios 1 do Moodle, para isso utilize a Linguagem C.
Laboratório de Programação II – Uso do ponteiro void *

Mais conteúdo relacionado

Mais procurados

Aula de química para o Enem - Eletroquímica: Pilhas e baterias - Módulo 2
Aula de química para o Enem -  Eletroquímica: Pilhas e baterias - Módulo 2Aula de química para o Enem -  Eletroquímica: Pilhas e baterias - Módulo 2
Aula de química para o Enem - Eletroquímica: Pilhas e baterias - Módulo 2Maiquel Vieira
 
Hidrocarbonetos - Marco Aurélio
Hidrocarbonetos - Marco AurélioHidrocarbonetos - Marco Aurélio
Hidrocarbonetos - Marco AurélioTurma Olímpica
 
Lista de exercicios reações de oxidação e redução
Lista de exercicios   reações de oxidação e reduçãoLista de exercicios   reações de oxidação e redução
Lista de exercicios reações de oxidação e reduçãoProfª Alda Ernestina
 
Aula 15 - Modularização -parte1
Aula 15 - Modularização -parte1Aula 15 - Modularização -parte1
Aula 15 - Modularização -parte1Pacc UAB
 
Mecanismos de reação sn1 e sn2
Mecanismos de reação sn1 e sn2Mecanismos de reação sn1 e sn2
Mecanismos de reação sn1 e sn2Adrianne Mendonça
 
Análise da Cerveja- Processos Industriais
Análise da Cerveja- Processos IndustriaisAnálise da Cerveja- Processos Industriais
Análise da Cerveja- Processos IndustriaisIFRS- Campus Feliz
 
Estruturas em C++ (struct)
Estruturas em C++ (struct)Estruturas em C++ (struct)
Estruturas em C++ (struct)Márcio Rizzatto
 
Reações de Substituição Nucleofílica e de Eliminação
Reações de Substituição Nucleofílica e de EliminaçãoReações de Substituição Nucleofílica e de Eliminação
Reações de Substituição Nucleofílica e de EliminaçãoJosé Nunes da Silva Jr.
 
Lista de exercícios em portugol
Lista de exercícios em portugolLista de exercícios em portugol
Lista de exercícios em portugolGabriel Faustino
 
Funções inorgânicas
Funções inorgânicasFunções inorgânicas
Funções inorgânicasISJ
 
Funções inorgânicas (sais e óxidos)
Funções inorgânicas (sais e óxidos)Funções inorgânicas (sais e óxidos)
Funções inorgânicas (sais e óxidos)Karol Maia
 
Campo MagnéTico
Campo MagnéTicoCampo MagnéTico
Campo MagnéTicodalgo
 
Quimica tabela periodica
Quimica tabela periodicaQuimica tabela periodica
Quimica tabela periodicaEstude Mais
 
Plano de Ensino Química 2ªSerie 2023.docx
Plano de Ensino Química 2ªSerie 2023.docxPlano de Ensino Química 2ªSerie 2023.docx
Plano de Ensino Química 2ªSerie 2023.docxFbioGil9
 

Mais procurados (20)

Aula de química para o Enem - Eletroquímica: Pilhas e baterias - Módulo 2
Aula de química para o Enem -  Eletroquímica: Pilhas e baterias - Módulo 2Aula de química para o Enem -  Eletroquímica: Pilhas e baterias - Módulo 2
Aula de química para o Enem - Eletroquímica: Pilhas e baterias - Módulo 2
 
Hidrocarbonetos - Marco Aurélio
Hidrocarbonetos - Marco AurélioHidrocarbonetos - Marco Aurélio
Hidrocarbonetos - Marco Aurélio
 
Lista de exercicios reações de oxidação e redução
Lista de exercicios   reações de oxidação e reduçãoLista de exercicios   reações de oxidação e redução
Lista de exercicios reações de oxidação e redução
 
Aula 6 gravimetria - 12-09-13
Aula 6   gravimetria - 12-09-13Aula 6   gravimetria - 12-09-13
Aula 6 gravimetria - 12-09-13
 
Aula 15 - Modularização -parte1
Aula 15 - Modularização -parte1Aula 15 - Modularização -parte1
Aula 15 - Modularização -parte1
 
Comandos em python
Comandos em pythonComandos em python
Comandos em python
 
Mecanismos de reação sn1 e sn2
Mecanismos de reação sn1 e sn2Mecanismos de reação sn1 e sn2
Mecanismos de reação sn1 e sn2
 
Análise da Cerveja- Processos Industriais
Análise da Cerveja- Processos IndustriaisAnálise da Cerveja- Processos Industriais
Análise da Cerveja- Processos Industriais
 
Estruturas em C++ (struct)
Estruturas em C++ (struct)Estruturas em C++ (struct)
Estruturas em C++ (struct)
 
Reações de Substituição Nucleofílica e de Eliminação
Reações de Substituição Nucleofílica e de EliminaçãoReações de Substituição Nucleofílica e de Eliminação
Reações de Substituição Nucleofílica e de Eliminação
 
Lista de exercícios em portugol
Lista de exercícios em portugolLista de exercícios em portugol
Lista de exercícios em portugol
 
Polaridade e solubilidade atualizada
Polaridade e solubilidade atualizadaPolaridade e solubilidade atualizada
Polaridade e solubilidade atualizada
 
Quimica Geral Lista 02
Quimica Geral Lista 02Quimica Geral Lista 02
Quimica Geral Lista 02
 
Funções inorgânicas
Funções inorgânicasFunções inorgânicas
Funções inorgânicas
 
Cromatografia
CromatografiaCromatografia
Cromatografia
 
Funções inorgânicas (sais e óxidos)
Funções inorgânicas (sais e óxidos)Funções inorgânicas (sais e óxidos)
Funções inorgânicas (sais e óxidos)
 
Campo MagnéTico
Campo MagnéTicoCampo MagnéTico
Campo MagnéTico
 
Quimica tabela periodica
Quimica tabela periodicaQuimica tabela periodica
Quimica tabela periodica
 
Plano de Ensino Química 2ªSerie 2023.docx
Plano de Ensino Química 2ªSerie 2023.docxPlano de Ensino Química 2ªSerie 2023.docx
Plano de Ensino Química 2ªSerie 2023.docx
 
Solução tampão
Solução tampãoSolução tampão
Solução tampão
 

Destaque

Laboratório de Programação II: Tipo Abstrato de Dados (TAD)
Laboratório de Programação II: Tipo Abstrato de Dados (TAD)Laboratório de Programação II: Tipo Abstrato de Dados (TAD)
Laboratório de Programação II: Tipo Abstrato de Dados (TAD)Alex Camargo
 
Laboratório de Programação II: Threads
Laboratório de Programação II: ThreadsLaboratório de Programação II: Threads
Laboratório de Programação II: ThreadsAlex Camargo
 
Javascript (parte 3)
Javascript (parte 3)Javascript (parte 3)
Javascript (parte 3)Alex Camargo
 
Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros Karoline Tavares
 

Destaque (6)

Laboratório de Programação II: Tipo Abstrato de Dados (TAD)
Laboratório de Programação II: Tipo Abstrato de Dados (TAD)Laboratório de Programação II: Tipo Abstrato de Dados (TAD)
Laboratório de Programação II: Tipo Abstrato de Dados (TAD)
 
Laboratório de Programação II: Threads
Laboratório de Programação II: ThreadsLaboratório de Programação II: Threads
Laboratório de Programação II: Threads
 
Javascript (parte 3)
Javascript (parte 3)Javascript (parte 3)
Javascript (parte 3)
 
Linguagem C - Ponteiros
Linguagem C - PonteirosLinguagem C - Ponteiros
Linguagem C - Ponteiros
 
Linguagem C 09 Ponteiros
Linguagem C 09 PonteirosLinguagem C 09 Ponteiros
Linguagem C 09 Ponteiros
 
Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros
 

Semelhante a Laboratório de Programação II: Uso do ponteiro void *

Apostila da linguagem c
Apostila da linguagem cApostila da linguagem c
Apostila da linguagem cana mastrocola
 
Apostila da linguagem c
Apostila da linguagem cApostila da linguagem c
Apostila da linguagem cana mastrocola
 
Apostila da linguagem c
Apostila da linguagem cApostila da linguagem c
Apostila da linguagem cana mastrocola
 
Linguagem c-para-microcontroladores
Linguagem c-para-microcontroladoresLinguagem c-para-microcontroladores
Linguagem c-para-microcontroladores34macchia34
 
Introdução à Linguagem de Programação C
Introdução à Linguagem de Programação CIntrodução à Linguagem de Programação C
Introdução à Linguagem de Programação CJose Augusto Cintra
 
Aula04 ponteiros e conversao
Aula04   ponteiros e conversaoAula04   ponteiros e conversao
Aula04 ponteiros e conversaoYuri Passos
 
Cet P Sistemas Linguagem C Introducao
Cet P Sistemas Linguagem C IntroducaoCet P Sistemas Linguagem C Introducao
Cet P Sistemas Linguagem C Introducaommind
 
Henriquecristovao manual c-cpp
Henriquecristovao manual c-cppHenriquecristovao manual c-cpp
Henriquecristovao manual c-cppRUI VIEIRA
 
Utilizando funções em C: modularizando os programas.
Utilizando funções em C: modularizando os programas.Utilizando funções em C: modularizando os programas.
Utilizando funções em C: modularizando os programas.SchoolByte
 
Jogos_Eletronicos_Aula_03_Introducao_Linguagem_Lua_2014.pdf
Jogos_Eletronicos_Aula_03_Introducao_Linguagem_Lua_2014.pdfJogos_Eletronicos_Aula_03_Introducao_Linguagem_Lua_2014.pdf
Jogos_Eletronicos_Aula_03_Introducao_Linguagem_Lua_2014.pdfPauloGomes623362
 
Apostila de-introdução-à-linguagem-c
Apostila de-introdução-à-linguagem-cApostila de-introdução-à-linguagem-c
Apostila de-introdução-à-linguagem-cMaicon Rodrigues
 

Semelhante a Laboratório de Programação II: Uso do ponteiro void * (20)

Apostila da linguagem c
Apostila da linguagem cApostila da linguagem c
Apostila da linguagem c
 
Apostila da linguagem c
Apostila da linguagem cApostila da linguagem c
Apostila da linguagem c
 
Apostila da linguagem c
Apostila da linguagem cApostila da linguagem c
Apostila da linguagem c
 
Apostila da linguagem c
Apostila da linguagem cApostila da linguagem c
Apostila da linguagem c
 
Pged 01
Pged 01Pged 01
Pged 01
 
Linguagem c-para-microcontroladores
Linguagem c-para-microcontroladoresLinguagem c-para-microcontroladores
Linguagem c-para-microcontroladores
 
C pic
C picC pic
C pic
 
Ud3
Ud3Ud3
Ud3
 
Aula2
Aula2Aula2
Aula2
 
Introdução à Linguagem de Programação C
Introdução à Linguagem de Programação CIntrodução à Linguagem de Programação C
Introdução à Linguagem de Programação C
 
Cap 2
Cap 2Cap 2
Cap 2
 
Cap 2
Cap 2Cap 2
Cap 2
 
Aula04 ponteiros e conversao
Aula04   ponteiros e conversaoAula04   ponteiros e conversao
Aula04 ponteiros e conversao
 
Cet P Sistemas Linguagem C Introducao
Cet P Sistemas Linguagem C IntroducaoCet P Sistemas Linguagem C Introducao
Cet P Sistemas Linguagem C Introducao
 
7194099-Manual-de-Java
7194099-Manual-de-Java7194099-Manual-de-Java
7194099-Manual-de-Java
 
Henriquecristovao manual c-cpp
Henriquecristovao manual c-cppHenriquecristovao manual c-cpp
Henriquecristovao manual c-cpp
 
Utilizando funções em C: modularizando os programas.
Utilizando funções em C: modularizando os programas.Utilizando funções em C: modularizando os programas.
Utilizando funções em C: modularizando os programas.
 
Jogos_Eletronicos_Aula_03_Introducao_Linguagem_Lua_2014.pdf
Jogos_Eletronicos_Aula_03_Introducao_Linguagem_Lua_2014.pdfJogos_Eletronicos_Aula_03_Introducao_Linguagem_Lua_2014.pdf
Jogos_Eletronicos_Aula_03_Introducao_Linguagem_Lua_2014.pdf
 
Introdução à Linguagem C
Introdução à Linguagem CIntrodução à Linguagem C
Introdução à Linguagem C
 
Apostila de-introdução-à-linguagem-c
Apostila de-introdução-à-linguagem-cApostila de-introdução-à-linguagem-c
Apostila de-introdução-à-linguagem-c
 

Mais de Alex Camargo

Escola Bíblica - Eclesiologia
Escola Bíblica - EclesiologiaEscola Bíblica - Eclesiologia
Escola Bíblica - EclesiologiaAlex Camargo
 
Escola Bíblica - Demonologia
Escola Bíblica - DemonologiaEscola Bíblica - Demonologia
Escola Bíblica - DemonologiaAlex Camargo
 
Python para finanças: explorando dados financeiros
Python para finanças: explorando dados financeirosPython para finanças: explorando dados financeiros
Python para finanças: explorando dados financeirosAlex Camargo
 
A practical guide: How to use Bitcoins?
A practical guide: How to use Bitcoins?A practical guide: How to use Bitcoins?
A practical guide: How to use Bitcoins?Alex Camargo
 
IA e Bioinformática: modelos computacionais de proteínas
IA e Bioinformática: modelos computacionais de proteínasIA e Bioinformática: modelos computacionais de proteínas
IA e Bioinformática: modelos computacionais de proteínasAlex Camargo
 
Introdução às criptomoedas: investimento, mercado e segurança
Introdução às criptomoedas: investimento, mercado e segurançaIntrodução às criptomoedas: investimento, mercado e segurança
Introdução às criptomoedas: investimento, mercado e segurançaAlex Camargo
 
Introdução às criptomoedas: criando a sua própria moeda como o Bitcoin!
Introdução às criptomoedas:  criando a sua própria moeda como o Bitcoin!Introdução às criptomoedas:  criando a sua própria moeda como o Bitcoin!
Introdução às criptomoedas: criando a sua própria moeda como o Bitcoin!Alex Camargo
 
Cristão versus Redes Sociais - Alex (Arca da Aliança)
Cristão versus Redes Sociais - Alex (Arca da Aliança)Cristão versus Redes Sociais - Alex (Arca da Aliança)
Cristão versus Redes Sociais - Alex (Arca da Aliança)Alex Camargo
 
Empatia e compaixão: O Bom Samaritano
Empatia e compaixão: O Bom SamaritanoEmpatia e compaixão: O Bom Samaritano
Empatia e compaixão: O Bom SamaritanoAlex Camargo
 
Alta performance em IA: uma abordagem pratica
Alta performance em IA: uma abordagem praticaAlta performance em IA: uma abordagem pratica
Alta performance em IA: uma abordagem praticaAlex Camargo
 
Bioinformática do DNA ao medicamento: ferramentas e usabilidade
Bioinformática do DNA ao medicamento: ferramentas e usabilidadeBioinformática do DNA ao medicamento: ferramentas e usabilidade
Bioinformática do DNA ao medicamento: ferramentas e usabilidadeAlex Camargo
 
Inteligência Artificial aplicada: reconhecendo caracteres escritos à mão
Inteligência Artificial aplicada: reconhecendo caracteres escritos à mãoInteligência Artificial aplicada: reconhecendo caracteres escritos à mão
Inteligência Artificial aplicada: reconhecendo caracteres escritos à mãoAlex Camargo
 
IA versus COVID-19 Deep Learning, Códigos e Execução em nuvem (Tchelinux 2020)
IA versus COVID-19 Deep Learning, Códigos e Execução em nuvem (Tchelinux 2020)IA versus COVID-19 Deep Learning, Códigos e Execução em nuvem (Tchelinux 2020)
IA versus COVID-19 Deep Learning, Códigos e Execução em nuvem (Tchelinux 2020)Alex Camargo
 
Algoritmos de inteligência artificial para classificação de notícias falsas. ...
Algoritmos de inteligência artificial para classificação de notícias falsas. ...Algoritmos de inteligência artificial para classificação de notícias falsas. ...
Algoritmos de inteligência artificial para classificação de notícias falsas. ...Alex Camargo
 
Fake News - Conceitos, métodos e aplicações de identificação e mitigação
Fake News - Conceitos, métodos e aplicações de identificação e mitigaçãoFake News - Conceitos, métodos e aplicações de identificação e mitigação
Fake News - Conceitos, métodos e aplicações de identificação e mitigaçãoAlex Camargo
 
PredictCovid: IA. SIEPE UNIPAMPA 2020
PredictCovid: IA. SIEPE UNIPAMPA 2020PredictCovid: IA. SIEPE UNIPAMPA 2020
PredictCovid: IA. SIEPE UNIPAMPA 2020Alex Camargo
 
Ia versus covid 19 - alex
Ia versus covid 19 - alexIa versus covid 19 - alex
Ia versus covid 19 - alexAlex Camargo
 
2a Mini-conf PredictCovid. Field: Artificial Intelligence
2a Mini-conf PredictCovid. Field: Artificial Intelligence2a Mini-conf PredictCovid. Field: Artificial Intelligence
2a Mini-conf PredictCovid. Field: Artificial IntelligenceAlex Camargo
 
Aula 5 - Considerações finais
Aula 5 - Considerações finaisAula 5 - Considerações finais
Aula 5 - Considerações finaisAlex Camargo
 
Aula 04 - Injeção de código (Cross-Site Scripting)
Aula 04 - Injeção de código (Cross-Site Scripting)Aula 04 - Injeção de código (Cross-Site Scripting)
Aula 04 - Injeção de código (Cross-Site Scripting)Alex Camargo
 

Mais de Alex Camargo (20)

Escola Bíblica - Eclesiologia
Escola Bíblica - EclesiologiaEscola Bíblica - Eclesiologia
Escola Bíblica - Eclesiologia
 
Escola Bíblica - Demonologia
Escola Bíblica - DemonologiaEscola Bíblica - Demonologia
Escola Bíblica - Demonologia
 
Python para finanças: explorando dados financeiros
Python para finanças: explorando dados financeirosPython para finanças: explorando dados financeiros
Python para finanças: explorando dados financeiros
 
A practical guide: How to use Bitcoins?
A practical guide: How to use Bitcoins?A practical guide: How to use Bitcoins?
A practical guide: How to use Bitcoins?
 
IA e Bioinformática: modelos computacionais de proteínas
IA e Bioinformática: modelos computacionais de proteínasIA e Bioinformática: modelos computacionais de proteínas
IA e Bioinformática: modelos computacionais de proteínas
 
Introdução às criptomoedas: investimento, mercado e segurança
Introdução às criptomoedas: investimento, mercado e segurançaIntrodução às criptomoedas: investimento, mercado e segurança
Introdução às criptomoedas: investimento, mercado e segurança
 
Introdução às criptomoedas: criando a sua própria moeda como o Bitcoin!
Introdução às criptomoedas:  criando a sua própria moeda como o Bitcoin!Introdução às criptomoedas:  criando a sua própria moeda como o Bitcoin!
Introdução às criptomoedas: criando a sua própria moeda como o Bitcoin!
 
Cristão versus Redes Sociais - Alex (Arca da Aliança)
Cristão versus Redes Sociais - Alex (Arca da Aliança)Cristão versus Redes Sociais - Alex (Arca da Aliança)
Cristão versus Redes Sociais - Alex (Arca da Aliança)
 
Empatia e compaixão: O Bom Samaritano
Empatia e compaixão: O Bom SamaritanoEmpatia e compaixão: O Bom Samaritano
Empatia e compaixão: O Bom Samaritano
 
Alta performance em IA: uma abordagem pratica
Alta performance em IA: uma abordagem praticaAlta performance em IA: uma abordagem pratica
Alta performance em IA: uma abordagem pratica
 
Bioinformática do DNA ao medicamento: ferramentas e usabilidade
Bioinformática do DNA ao medicamento: ferramentas e usabilidadeBioinformática do DNA ao medicamento: ferramentas e usabilidade
Bioinformática do DNA ao medicamento: ferramentas e usabilidade
 
Inteligência Artificial aplicada: reconhecendo caracteres escritos à mão
Inteligência Artificial aplicada: reconhecendo caracteres escritos à mãoInteligência Artificial aplicada: reconhecendo caracteres escritos à mão
Inteligência Artificial aplicada: reconhecendo caracteres escritos à mão
 
IA versus COVID-19 Deep Learning, Códigos e Execução em nuvem (Tchelinux 2020)
IA versus COVID-19 Deep Learning, Códigos e Execução em nuvem (Tchelinux 2020)IA versus COVID-19 Deep Learning, Códigos e Execução em nuvem (Tchelinux 2020)
IA versus COVID-19 Deep Learning, Códigos e Execução em nuvem (Tchelinux 2020)
 
Algoritmos de inteligência artificial para classificação de notícias falsas. ...
Algoritmos de inteligência artificial para classificação de notícias falsas. ...Algoritmos de inteligência artificial para classificação de notícias falsas. ...
Algoritmos de inteligência artificial para classificação de notícias falsas. ...
 
Fake News - Conceitos, métodos e aplicações de identificação e mitigação
Fake News - Conceitos, métodos e aplicações de identificação e mitigaçãoFake News - Conceitos, métodos e aplicações de identificação e mitigação
Fake News - Conceitos, métodos e aplicações de identificação e mitigação
 
PredictCovid: IA. SIEPE UNIPAMPA 2020
PredictCovid: IA. SIEPE UNIPAMPA 2020PredictCovid: IA. SIEPE UNIPAMPA 2020
PredictCovid: IA. SIEPE UNIPAMPA 2020
 
Ia versus covid 19 - alex
Ia versus covid 19 - alexIa versus covid 19 - alex
Ia versus covid 19 - alex
 
2a Mini-conf PredictCovid. Field: Artificial Intelligence
2a Mini-conf PredictCovid. Field: Artificial Intelligence2a Mini-conf PredictCovid. Field: Artificial Intelligence
2a Mini-conf PredictCovid. Field: Artificial Intelligence
 
Aula 5 - Considerações finais
Aula 5 - Considerações finaisAula 5 - Considerações finais
Aula 5 - Considerações finais
 
Aula 04 - Injeção de código (Cross-Site Scripting)
Aula 04 - Injeção de código (Cross-Site Scripting)Aula 04 - Injeção de código (Cross-Site Scripting)
Aula 04 - Injeção de código (Cross-Site Scripting)
 

Último

VARIEDADES LINGUÍSTICAS - 1. pptx
VARIEDADES        LINGUÍSTICAS - 1. pptxVARIEDADES        LINGUÍSTICAS - 1. pptx
VARIEDADES LINGUÍSTICAS - 1. pptxMarlene Cunhada
 
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de..."É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...Rosalina Simão Nunes
 
Manual da CPSA_1_Agir com Autonomia para envio
Manual da CPSA_1_Agir com Autonomia para envioManual da CPSA_1_Agir com Autonomia para envio
Manual da CPSA_1_Agir com Autonomia para envioManuais Formação
 
PLANOS E EIXOS DO CORPO HUMANO.educacao física pptx
PLANOS E EIXOS DO CORPO HUMANO.educacao física pptxPLANOS E EIXOS DO CORPO HUMANO.educacao física pptx
PLANOS E EIXOS DO CORPO HUMANO.educacao física pptxSamiraMiresVieiradeM
 
Construção (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãConstrução (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãIlda Bicacro
 
Dicionário de Genealogia, autor Gilber Rubim Rangel
Dicionário de Genealogia, autor Gilber Rubim RangelDicionário de Genealogia, autor Gilber Rubim Rangel
Dicionário de Genealogia, autor Gilber Rubim RangelGilber Rubim Rangel
 
GÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - CartumGÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - CartumAugusto Costa
 
Aula de História Ensino Médio Mesopotâmia.pdf
Aula de História Ensino Médio Mesopotâmia.pdfAula de História Ensino Médio Mesopotâmia.pdf
Aula de História Ensino Médio Mesopotâmia.pdfFernandaMota99
 
Revista-Palavra-Viva-Profetas-Menores (1).pdf
Revista-Palavra-Viva-Profetas-Menores (1).pdfRevista-Palavra-Viva-Profetas-Menores (1).pdf
Revista-Palavra-Viva-Profetas-Menores (1).pdfMárcio Azevedo
 
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -Aline Santana
 
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...azulassessoria9
 
Bullying - Atividade com caça- palavras
Bullying   - Atividade com  caça- palavrasBullying   - Atividade com  caça- palavras
Bullying - Atividade com caça- palavrasMary Alvarenga
 
o ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdfo ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdfCamillaBrito19
 
CIÊNCIAS HUMANAS - ENSINO MÉDIO. 2024 2 bimestre
CIÊNCIAS HUMANAS - ENSINO MÉDIO. 2024 2 bimestreCIÊNCIAS HUMANAS - ENSINO MÉDIO. 2024 2 bimestre
CIÊNCIAS HUMANAS - ENSINO MÉDIO. 2024 2 bimestreElianeElika
 
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdfPRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdfprofesfrancleite
 
análise de redação completa - Dissertação
análise de redação completa - Dissertaçãoanálise de redação completa - Dissertação
análise de redação completa - DissertaçãoMaiteFerreira4
 
Portfolio_Trilha_Meio_Ambiente_e_Sociedade.pdf
Portfolio_Trilha_Meio_Ambiente_e_Sociedade.pdfPortfolio_Trilha_Meio_Ambiente_e_Sociedade.pdf
Portfolio_Trilha_Meio_Ambiente_e_Sociedade.pdfjanainadfsilva
 
A poesia - Definições e Característicass
A poesia - Definições e CaracterísticassA poesia - Definições e Característicass
A poesia - Definições e CaracterísticassAugusto Costa
 
Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!Ilda Bicacro
 
Literatura Brasileira - escolas literárias.ppt
Literatura Brasileira - escolas literárias.pptLiteratura Brasileira - escolas literárias.ppt
Literatura Brasileira - escolas literárias.pptMaiteFerreira4
 

Último (20)

VARIEDADES LINGUÍSTICAS - 1. pptx
VARIEDADES        LINGUÍSTICAS - 1. pptxVARIEDADES        LINGUÍSTICAS - 1. pptx
VARIEDADES LINGUÍSTICAS - 1. pptx
 
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de..."É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
 
Manual da CPSA_1_Agir com Autonomia para envio
Manual da CPSA_1_Agir com Autonomia para envioManual da CPSA_1_Agir com Autonomia para envio
Manual da CPSA_1_Agir com Autonomia para envio
 
PLANOS E EIXOS DO CORPO HUMANO.educacao física pptx
PLANOS E EIXOS DO CORPO HUMANO.educacao física pptxPLANOS E EIXOS DO CORPO HUMANO.educacao física pptx
PLANOS E EIXOS DO CORPO HUMANO.educacao física pptx
 
Construção (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãConstrução (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! Sertã
 
Dicionário de Genealogia, autor Gilber Rubim Rangel
Dicionário de Genealogia, autor Gilber Rubim RangelDicionário de Genealogia, autor Gilber Rubim Rangel
Dicionário de Genealogia, autor Gilber Rubim Rangel
 
GÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - CartumGÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
 
Aula de História Ensino Médio Mesopotâmia.pdf
Aula de História Ensino Médio Mesopotâmia.pdfAula de História Ensino Médio Mesopotâmia.pdf
Aula de História Ensino Médio Mesopotâmia.pdf
 
Revista-Palavra-Viva-Profetas-Menores (1).pdf
Revista-Palavra-Viva-Profetas-Menores (1).pdfRevista-Palavra-Viva-Profetas-Menores (1).pdf
Revista-Palavra-Viva-Profetas-Menores (1).pdf
 
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
 
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...
 
Bullying - Atividade com caça- palavras
Bullying   - Atividade com  caça- palavrasBullying   - Atividade com  caça- palavras
Bullying - Atividade com caça- palavras
 
o ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdfo ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdf
 
CIÊNCIAS HUMANAS - ENSINO MÉDIO. 2024 2 bimestre
CIÊNCIAS HUMANAS - ENSINO MÉDIO. 2024 2 bimestreCIÊNCIAS HUMANAS - ENSINO MÉDIO. 2024 2 bimestre
CIÊNCIAS HUMANAS - ENSINO MÉDIO. 2024 2 bimestre
 
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdfPRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
 
análise de redação completa - Dissertação
análise de redação completa - Dissertaçãoanálise de redação completa - Dissertação
análise de redação completa - Dissertação
 
Portfolio_Trilha_Meio_Ambiente_e_Sociedade.pdf
Portfolio_Trilha_Meio_Ambiente_e_Sociedade.pdfPortfolio_Trilha_Meio_Ambiente_e_Sociedade.pdf
Portfolio_Trilha_Meio_Ambiente_e_Sociedade.pdf
 
A poesia - Definições e Característicass
A poesia - Definições e CaracterísticassA poesia - Definições e Característicass
A poesia - Definições e Característicass
 
Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!
 
Literatura Brasileira - escolas literárias.ppt
Literatura Brasileira - escolas literárias.pptLiteratura Brasileira - escolas literárias.ppt
Literatura Brasileira - escolas literárias.ppt
 

Laboratório de Programação II: Uso do ponteiro void *

  • 1. Uso do ponteiro void *Uso do ponteiro void * Prof. Alex Camargo alexcamargoweb@gmail.com UNIVERSIDADE FEDERAL DO PAMPA CAMPUS BAGÉ LABORATÓRIO DE PROGRAMAÇÃO II
  • 2. Introdução Ponteiros são variáveis cujos valores são endereços de memória. Uma variável de ponteiro é uma variável especialmente declarada para guardar um ponteiro para seu tipo especificado. Ponteiros têm 3 funções principais em C:  fornecer uma maneira rápida de referenciar elementos de um vetor;  permitem a modificação de argumentos de funções: variáveis não globais e não locais a ela;  oportunizar o uso de alocação e desalocação de memória em tempo de execução conforme a necessidade do programa. Laboratório de Programação II – Uso do ponteiro void *
  • 3. Introdução A forma de declaração de uma variável ponteiro é: tipo *nome_variável Onde tipo é o tipo de variável apontada pela variável ponteiro. Exemplo: int *p; //p é um ponteiro de int Ou seja, p apontará para uma região de memória que armazena um valor inteiro. Laboratório de Programação II – Uso do ponteiro void *
  • 4. Operadores & e *  O primeiro operador de ponteiro é o &. Ele é um operador unário que devolve o endereço na memória de seu operando.  O segundo operador é o *. Ele é um operador unário que devolve o valor da variável localizada no endereço que o segue. Operadores unários interagem com apenas um elemento (Ex.: p++ e p--). Laboratório de Programação II – Uso do ponteiro void *
  • 5. Operadores & e * Laboratório de Programação II – Uso do ponteiro void *
  • 6. Ponteiros e vetores Em C, ponteiros e vetores estão intimamente relacionados. O nome de um vetor sem o índice é um ponteiro para o primeiro elemento do vetor. Exemplo: Laboratório de Programação II – Uso do ponteiro void *
  • 7. Ponteiros e vetores Sabemos agora que, na verdade, o nome de um vetor é um ponteiro constante. Podemos ver que p[2] equivale a *(p+2). Laboratório de Programação II – Uso do ponteiro void *
  • 8. Ponteiros na passagem de parâmetros por referência Neste contexto, os ponteiros são utilizados para permitir que seja acessada uma região de memória ocupada por uma variável não "enxergada" pela função, ou seja, por uma variável fora do escopo da função.  Para isso, a função recebe e armazena em variáveis ponteiro o endereço das variáveis fora do seu escopo.  Para passarmos uma variável para uma função e fazer com que ela seja alterada, precisamos passar a referência dessa variável, em vez de seu valor.  Para fazer isso, basta colocar o operador & antes do argumento que vamos enviar, e colocar um asterisco * no parâmetro da função. Laboratório de Programação II – Uso do ponteiro void *
  • 9. Ponteiros na passagem de parâmetros por referência Neste contexto, os ponteiros são utilizados para permitir que seja acessada uma região de memória ocupada por uma variável não "enxergada" pela função, ou seja, por uma variável fora do escopo da função.  Para isso, a função recebe e armazena em variáveis ponteiro o endereço das variáveis fora do seu escopo.  Para passarmos uma variável para uma função e fazer com que ela seja alterada, precisamos passar a referência dessa variável, em vez de seu valor.  Para fazer isso, basta colocar o operador & antes do argumento que vamos enviar, e colocar um asterisco * no parâmetro da função. Laboratório de Programação II – Uso do ponteiro void *
  • 10. Alocação dinâmica de memória É o meio pelo qual um programa pode obter memória enquanto está em execução. Ponteiros fornecem o suporte necessário para o poderoso sistema de alocação dinâmica em C. Basicamente, utilizamos as seguintes funções (estão no cabeçalho stdlib.h):  malloc: aloca memória  free: libera memória Laboratório de Programação II – Uso do ponteiro void *
  • 11. Alocação dinâmica de memória malloc: aloca memória (void*) malloc(tamanho em bytes)  Para que possamos determinar qual o tamanho em bytes que queremos, utilizamos a função sizeof.  O retorno de malloc é um ponteiro genérico e deve ser configurado para o tipo alocado. No entanto, é comum fazermos a conversão explicitamente, utilizando o operador de molde de tipo (cast). Exemplo: pt = (int*) malloc (sizeof(int)); Laboratório de Programação II – Uso do ponteiro void *
  • 12. Alocação dinâmica de memória free: libera memória free(endereço)  Você é responsável por liberar a memória que você alocou! Exemplo: free(pt); Laboratório de Programação II – Uso do ponteiro void *
  • 13. Alocação dinâmica de memória Um exemplo de desperdício de memória é quando um vetor de 1000 posições é declarado quando não se sabe, de fato, se as 1000 posições serão necessárias. Laboratório de Programação II – Uso do ponteiro void *
  • 14. O tipo void Antes de falarmos de ponteiros void *, veremos o tipo void. Isso nos ajudará a entender o comportamento do ponteiro e a diagnosticar possíveis problemas. Laboratório de Programação II – Uso do ponteiro void *
  • 15. O tipo void O tipo void é uma das exceções das regras de tipo. Todos os tipos básicos que existem servem para armazenar alguma espécie de dado definido em um tamanho.  char: 1 byte  int: 4 bytes  float: 4 bytes  double: 8 bytes O tipo void possui tamanho igual a 1 byte, mas não serve para armazenar dados de qualquer tipo. Laboratório de Programação II – Uso do ponteiro void *
  • 16. O tipo void Assim, o tipo void é usado quando não queremos dados armazenados nele. Esse é um conceito fácil de se entender, pois em funções que não retornam nada devemos colocar void. Exemplo: Laboratório de Programação II – Uso do ponteiro void *
  • 17. void * Chamamos de ponteiros vazios qualquer ponteiro que não possua um tipo de dado específico, ou seja, se seu tipo de dado for void. Ponteiros vazios são ponteiros genéricos que podem apontar para qualquer outro tipo de dado, mas trazem consigo problemas lógicos:  como são ponteiros vazios, não há um tipo de dado específico;  não podemos determinar seu tamanho;  assim como também não podemos dereferenciá-lo diretamente. Esses problemas são facilmente resolvidos se induzirmos o endereço void para o endereço do tipo de dado correto, da mesma forma que executamos qualquer typecast. Laboratório de Programação II – Uso do ponteiro void *
  • 18. void * Entender o conceito de ponteiros genéricos é de suma importância:  para a compreensão de estruturas dinâmicas de memória;  trabalharemos o tempo todo com funções que retornam endereços de memória genéricos;  ou seja, podem ser qualquer tipo de endereço de memória, portanto sem tipo de dado (void). Laboratório de Programação II – Uso do ponteiro void *
  • 19. Laboratório de Programação II – Uso do ponteiro void *
  • 20. Considerações finais Um ponteiro genérico é um ponteiro que pode apontar para qualquer tipo de dado:  O tipo de dado apontado por um ponteiro genérico deve ser controlado pelo usuário, usando um type cast (conversão de tipo).  Não podemos armazenar nada em tipo void.  Só se pode armazenar endereços de memória em void*. Dentre as três regras, as duas primeiras já deveríamos estar acostumados. A "nova" (a última regra) é o que garante generabilidade para o tipo void. Laboratório de Programação II – Uso do ponteiro void *
  • 21. Exercícios Responda as questões referentes ao uso do ponteiro void * contidas na Lista de Exercícios 1 do Moodle, para isso utilize a Linguagem C. Laboratório de Programação II – Uso do ponteiro void *