Post on 20-Jun-2015
description
Centro de Ciências Exatas e TecnológicasCET150 - Processamento de Dados I
Prof. Marcos Bião
Aula – 10 Ponteiros
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.;
Arquitetura de Von Neumann
Busca e executa
Lê e escreve
Arquitetura de Von Neumann
Dados
Código
Código
Dados
Código
Dados
Memória Principal
Busca e executa
Lê e escreve
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
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;
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;
Descrição
Descrição
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.
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).
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;}
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;}
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;}
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)
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.