• Nenhum resultado encontrado

Aula20 Ponteiros Parte1

N/A
N/A
Protected

Academic year: 2021

Share "Aula20 Ponteiros Parte1"

Copied!
44
0
0

Texto

(1)

P

ROGRAMAÇÃO DE

C

OMPUTADORES

I

Ponteiros – Parte 1

(2)

M

EMÓRIA



A memória está formada

por várias células.



Cada célula contém um

endereço e um valor.



O tamanho do endereço e

o tamanho do valor

dependem da arquitetura

dependem da arquitetura

do computador (32/64

bits)

(3)

M

EMÓRIA



Declaração um caractere



Declaração um caractere

chamado i .



Os caracteres ocupam 1

(4)

M

EMÓRIA



Declaração um número



Declaração um número

inteiro chamado i .



Os inteiros ocupam 4

bytes na memória (para

uma arquitetura de 32

bits)

(5)

M

EMÓRIA



Declaração de um número



Declaração de um número

ponto flutuante chamado i .



Os pontos flutuantes

(6)

M

EMÓRIA



Declaração de um número

ponto flutuante de dupla

ponto flutuante de dupla

precisão chamado i .



Os pontos flutuantes de

dupla precisão ocupam 8

bytes na memória (para

uma arquitetura de 32 bits)

(7)

P

ONTEIROS



Como funciona o scanf?



Como é atribuído o valor digitado a uma variável que é de

um tipo primitivo?

(8)

P

ONTEIROS



Como funciona o scanf?

(9)

P

ONTEIROS



Como funciona o scanf?

(10)

P

ONTEIROS



Algumas utilidades de ponteiros:



Fornecem os meios pelos quais as funções podem modificar

seus argumentos



Permitem passagem de parâmetros por referência.



Possibilitam alocação dinâmica de memória.

(11)

P

ONTEIROS



O que são?



Um ponteiro é uma variável que contém um endereço de

memória.



Esse endereço é normalmente a posição de uma outra

variável na memória.

variável na memória.



Se uma variável contém o endereço de uma outra, então a

(12)

P

ONTEIROS



Sintaxe para declaração:



<tipo> * <nome_variável>;



Exemplo que declara uma variável ptr que é um ponteiro

Exemplo que declara uma variável ptr que é um ponteiro

para um inteiro:

(13)

P

ONTEIROS

(14)

A

LOCAÇÃO



Declaração de quatro ponteiros(c, i , f e d).

Cada ponteiro de um tipo diferente(char, int,

float, double)

float, double)



Todos eles ocupam o mesmo espaço na

memória, 4 bytes



Isso acontece porque todos eles armazenam

endereços de memória, e o tamanho de um

endereço de memória e o mesmo para todos

os tipos.

(15)

A

LOCAÇÃO

(16)

A

LOCAÇÃO



Declaração de um inteiro i



A variável i recebe o valor 15. Esse valor 15

e colocado no campo valor da memória

alocada previamente para a variável



Lembrem que essa notação com o 15 na

ultima casa e apenas didática na verdade os

valores são binários.

(17)

A

LOCAÇÃO



A variável c do tipo char é criada e

(18)

A

LOCAÇÃO



Ponteiro de inteiro declarado.



Ponteiro de inteiro declarado.



O nome desse ponteiro é p e ele é

inicializada no momento de sua criacão.



O valor que esse ponteiro recebe e o

endereço da variável i(&i) que nesse

caso e o endereço 00000000

(19)

A

LOCAÇÃO



Finalizando, fazemos uma atribuição.



Finalizando, fazemos uma atribuição.



Colocamos 25 no valor apontado por

p. Como visto no slide anterior p

aponta para i

(20)

E

NDEREÇOS



Ao declararmos uma variável x como acima, temos

associados a ela os seguintes elementos:



Um nome (x)



Um endereço de memória ou referência (ex: 0xbfd267c4)

Um valor (100)



Um valor (100)



Para acessarmos o endereço de uma variável, utilizamos

(21)

E

NDEREÇOS



Um ponteiro (apontador ou pointer) e um tipo especial de

variável cujo valor e um endereço.



Um ponteiro pode ter o valor especial NULL, quando não

contém nenhum endereço.

(22)

E

NDEREÇOS



A expressão acima representa o conteúdo do endereço de

memória guardado na variável var.



Ou seja, var não guarda um valor, mas sim um endereço

(23)

O O

PERADOR ADDRESS

-

OF

(&)



Retorna o endereço de uma variável

Aparece na tela:

O valor de x = 100

(24)

P

ONTEIRO



Um apontador e uma variável que pode armazenar

(25)

P

ONTEIROS

Aparece na tela:

valor de x = 100

(26)
(27)

D

ECLARAÇÃO DE

P

ONTEIROS



Ha vários tipos de ponteiros:



ponteiros para caracteres



ponteiros para inteiros



ponteiros para ponteiros para inteiros



ponteiros para vetores

ponteiros para estruturas



ponteiros para estruturas



O compilador C faz questão de saber de que tipo de

(28)

D

ECLARAÇÃO DE

P

ONTEIROS



Utiliza-se o operador unário*

(29)

E

XEMPLOS DE

U

TILIZAÇÃO DE

P

ONTEIROS



Atribuição de ponteiros para ponteiros inteiros

(30)

E

XEMPLOS DE

U

TILIZAÇÃO DE

P

ONTEIROS



Atribuição de ponteiros para ponteiros inteiros

(31)

P

ROBLEMAS COM

A

TRIBUIÇÃO DE

P

ONTEIROS



Um ponteiro sempre deve apontar para o tipo de dado

correto. Caso contrário, podem ocorrer erros durante a

execução do programa.



O trecho de código (apresentado na página 115 do livro “C



O trecho de código (apresentado na página 115 do livro “C

Completo e Total”) a seguir apresenta erro de lógica

porque um ponteiro aponta para um tipo incorreto.

(32)
(33)
(34)

P

ROBLEMAS COM

A

TRIBUIÇÃO DE

P

ONTEIROS

Warning apresentado ao compilar o

código no Dev C++. Um warning

não impede que o programa seja

compilado.

(35)

P

ROBLEMAS COM

A

TRIBUIÇÃO DE

P

ONTEIROS

(36)

P

ROBLEMAS COM

A

TRIBUIÇÃO DE

P

ONTEIROS

Execução do código com a mudança do

ponteiro para o tipo char.

(37)

P

ROBLEMAS COM

A

TRIBUIÇÃO DE

P

ONTEIROS



E se substituirmos o ponteiro de inteiro para um ponteiro

(38)

P

ROBLEMAS COM

A

TRIBUIÇÃO DE

P

ONTEIROS



E se substituirmos o ponteiro de inteiro para um ponteiro

(39)

P

ROBLEMAS

C

OM

P

ONTEIROS



Atribuição de um valor diretamente a um ponteiro

(40)

P

ROBLEMAS

C

OM

P

ONTEIROS



Atribuição de um valor diretamente a um ponteiro

(41)

P

ROBLEMAS

C

OM

P

ONTEIROS



Atribuição de um valor diretamente a um ponteiro

(42)

P

ROBLEMAS

C

OM

P

ONTEIROS



Atribuição de um valor diretamente a um ponteiro



Vamos tentar mudar o valor da posição referenciada por ptr2

(43)



Atribuição de uma referência a um valor de um ponteiro

P

ROBLEMAS COM

P

ONTEIROS

2293620 é conversão de 0022FF74 de

2293620 é conversão de 0022FF74 de

Hexadecimal para decimal

(44)

R

EFERÊNCIAS



Notas de Aula do Professor Romildo Malaquias

(DECOM/UFOP)



Notas de Aula do Professor Giori Ambrósio

Referências

Documentos relacionados

Em um módulo de 32 bits (como os antigos módulos de 72 vias), são necessários 7 bits adicionais para cada 32 bits de memória, mas nos módulos DIMM de 64 bits atuais, são

1º - Fica autorizado ao Estado de Goiás, por meio do Poder Executivo Estadual, a instituir a Central de Atendimento Telefônico ao Idoso e Portador de Necessidades

A Unidade de Ponto Flutuante (FPU) possui 32 registradores 32-bits de precisão simples, 32 registradores 64-bits de precisão dupla e 16 registradores 128-bits de precisão

As Baterias HANNAIK - Chumbo-Ácidas Reguladas por Válvula (VRLA) - utilizam a tecnologia de combinação de oxigénio, são mais sensíveis que as ventiladas e necessitam de um

Este trabalho tem como objetivo a implementação de estratégias metodológicas para o estudo de comportamentos sociais em animais modelo de autismo, bem como, caracterizar, por meio

[r]

[r]

Estudo retrospectivo e observacional em que foram avaliados 501 testes da mesa de inclinação consecutivos, realizados em duas instituições públicas e terciárias da cidade do Rio