Download - 10- ponteiros - C
![Page 1: 10- ponteiros - C](https://reader035.vdocuments.site/reader035/viewer/2022081504/5585247bd8b42aea748b5087/html5/thumbnails/1.jpg)
Centro de Ciências Exatas e TecnológicasCET150 - Processamento de Dados I
Prof. Marcos Bião
Aula – 10 Ponteiros
![Page 2: 10- ponteiros - C](https://reader035.vdocuments.site/reader035/viewer/2022081504/5585247bd8b42aea748b5087/html5/thumbnails/2.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022081504/5585247bd8b42aea748b5087/html5/thumbnails/3.jpg)
Arquitetura de Von Neumann
Busca e executa
Lê e escreve
![Page 4: 10- ponteiros - C](https://reader035.vdocuments.site/reader035/viewer/2022081504/5585247bd8b42aea748b5087/html5/thumbnails/4.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022081504/5585247bd8b42aea748b5087/html5/thumbnails/5.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022081504/5585247bd8b42aea748b5087/html5/thumbnails/6.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022081504/5585247bd8b42aea748b5087/html5/thumbnails/7.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022081504/5585247bd8b42aea748b5087/html5/thumbnails/8.jpg)
Descrição
![Page 9: 10- ponteiros - C](https://reader035.vdocuments.site/reader035/viewer/2022081504/5585247bd8b42aea748b5087/html5/thumbnails/9.jpg)
Descrição
![Page 10: 10- ponteiros - C](https://reader035.vdocuments.site/reader035/viewer/2022081504/5585247bd8b42aea748b5087/html5/thumbnails/10.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022081504/5585247bd8b42aea748b5087/html5/thumbnails/11.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022081504/5585247bd8b42aea748b5087/html5/thumbnails/12.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022081504/5585247bd8b42aea748b5087/html5/thumbnails/13.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022081504/5585247bd8b42aea748b5087/html5/thumbnails/14.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022081504/5585247bd8b42aea748b5087/html5/thumbnails/15.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022081504/5585247bd8b42aea748b5087/html5/thumbnails/16.jpg)
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.