16
Centro de Ciências Exatas e Tecnológicas CET150 - Processamento de Dados I Prof. Marcos Bião Aula – 10 Ponteiros

10- ponteiros - C

Embed Size (px)

DESCRIPTION

Aula de ponteiros em C

Citation preview

Page 1: 10-  ponteiros - C

Centro de Ciências Exatas e TecnológicasCET150 - Processamento de Dados I

Prof. Marcos Bião

Aula – 10 Ponteiros

Page 2: 10-  ponteiros - C

Arquitetura de Von Neumann•Os computadores pessoais utilizam uma arquitetura que é baseada na arquitetura de Von Neumann.

•Esta arquitetura se baseia na utilização de um mesmo bloco de memória para armazenar dados e código executável.

•O processador fica responsável por buscar código na mesma memória em que busca por um dado.;

Page 3: 10-  ponteiros - C

Arquitetura de Von Neumann

Busca e executa

Lê e escreve

Page 4: 10-  ponteiros - C

Arquitetura de Von Neumann

Dados

Código

Código

Dados

Código

Dados

Memória Principal

Busca e executa

Lê e escreve

Page 5: 10-  ponteiros - C

Arquitetura de Von Neumann•Suponha uma memória RAM com capacidade de 8 B. Ela pode ser endereçada dos endereços 0 a 7, cada um com a capacidade de 1 B.

0x00x10x20x30x40x50x60x7

E se ela tivesse 1GB, iria doEndereço 0 a qual número decimal?

Resp.: 1073741823

Page 6: 10-  ponteiros - C

Descrição•Ponteiros estão entre as capacidades mais difíceis de se dominar na linguagem C;

•Ponteiros são variáveis cujos valores são endereços de memória;

•Uma variável comum contém claramente um valor específico;

Page 7: 10-  ponteiros - C

Descrição•A memória do computador é dividida em bytes, numerados de zero até o limite da memória do computador;•Esses números são chamados de endereços de bytes;•Um endereço é uma referencia que o computador usa para localizar variáveis;•Seu endereço é o do primeiro byte ocupado por ela;•Os programas, quando carregados, ocupam uma certa parte da memória;•Toda variável e toda função dos programas em C começam em um endereço particular, que é chamado endereço da variável ou da função;

Page 8: 10-  ponteiros - C

Descrição

Page 9: 10-  ponteiros - C

Descrição

Page 10: 10-  ponteiros - C

Declaração•Ponteiros devem ser definidos antes de sua utilização, como qualquer outra variável;

Exemplo:int *countPtr;

Int count;

•OBS: o ponteiro sempre guardara o primeiro endereço da variavel.

Page 11: 10-  ponteiros - C

Inicialização•Se o ponteiro for ser inicializado com o endereço de uma determinada variável, pode-se fazer da seguinte forma:

int numero = 5;int *numeroPtr = №

•Caso não tenha um endereço para ser atribuído, deve-se apontá-lo para o primeiro endereço da memoria (NULL).

Page 12: 10-  ponteiros - C

Operador &•Alguém lembra do simbolo “&” usado no scanf?

•O “&” é um operador que busca o endereço que a variável esta na memoria RAM.•Vejamos o exemplo:

int main(void){ int a=1; printf("O valor e %d e esta no endereco %d",a,&a); return 0;}

Page 13: 10-  ponteiros - C

Operador *•Esse operador é um pouco diferente do “&”.•O “*” mostra o valor que esta em um endereço.•Vejamos o exemplo:

int main(void){ int a=1; int *p=&a; printf("O valor e %d e esta no endereco %d",*p,p); return 0;}

Page 14: 10-  ponteiros - C

Declaração•Com a função sizeof(), podemos saber quantos bytes um determinado tipo de variável ocupa;•Vejamos o exemplo:#include <stdio.h>

int main(void){ char caractere; int inteiro; float Float; double Double; printf("Caractere: %d bytes \t em %d\n", sizeof(caractere), &caractere); printf("Inteiro: %d bytes \t em %d\n", sizeof(inteiro), &inteiro); printf("Float: %d bytes \t em %d\n", sizeof(Float), &Float); printf("Double: %d bytes \t em %d\n", sizeof(Double), &Double); return 0;}

Page 15: 10-  ponteiros - C

Função por referencia•Na passagem por referencia, os valores não são copiados

•Passa-se o endereço da variável e qualquer alteração é feita diretamente na mesma.

•Vejamos um exemplo:– Faça uma função que receba o salario e a

porcentagem de aumento e faça a operação.

•Código no Code.(ponteiro01)

Page 16: 10-  ponteiros - C

Exercícios•Faça uma função chamada troca, que recebe dois valores inteiros A e B, e troca o valor de A pelo valor de B, e vice-versa.•Use uma função que receba um ponteiro com o endereço de um vetor,faça a escrita e o imprima.