• Nenhum resultado encontrado

Ponteiros-ApresentaçãoemSala

N/A
N/A
Protected

Academic year: 2021

Share "Ponteiros-ApresentaçãoemSala"

Copied!
49
0
0

Texto

(1)Centro Universitário Franciscano Curso de Sistemas de Informação Disciplina de algoritmos e programação II. Ponteiros Profa.: Simone Ceolin Slides (Prof.Tiago Rios da Rocha). Primeiro Semestre 2011.

(2) Sumário  Definição  Declaração de ponteiros  Inicialização de ponteiros  Usos do * e &  Operações com ponteiros  Vetores e ponteiros  Ponteiros e vetores multidimensionais  Vetores de ponteiros  Ponteiros de ponteiros.

(3) Definição.

(4) Introdução Para nós é facil de entender que: "a" é igual ao valor 5. "ch" é igual ao valor 'x'. "a" ou "ch" para o compilador são endereços de memória. São lugares de memória que contém, no caso de "a" um inteiro com valor 5 e no caso de "ch" um caractere com valor 'x'..

(5) O que é um ponteiro?  Um ponteiro é uma variável que contém o endereço. de uma outra variável  Toda variável declarada em um programa tem um endereço. de memória alocado para si e o número de posições de memória alocado depende do seu tipo.  Ponteiros podem apontar (receber o endereço) para variáveis de qualquer um dos tipos disponíveis na linguagem.  Ponteiros são importantes para:  alocação dinâmica de memória,  passagem de parâmetros para funções.

(6) O que é um ponteiro?  As variáveis simples e arrays podem ser considerados. ponteiros cujo endereços são constantes e que indicam lugares na memória de dados.  Funções podem ser considerados ponteiros que armazenam um endereço de memória de programa.

(7) O que é um ponteiro?  Um ponteiro é uma variável que guarda um endereço de. memória de outro objeto. Esse endereço é a localização de outra variável na memória, embora ele possa ser o endereço de uma porta ou um endereço com propósito especial na RAM, como uma área auxiliar (buffer).  Se uma variável contém o endereço de uma outra variável, a primeira é conhecida como um ponteiro para a segunda..

(8) Variáveis possuem nome, endereço e conteúdo #include <iostream> using namespace std; int dog, cat, bird, fish; void f(int pet) { printf("%d",pet); } int main() { int i, j, k; }.

(9) Declaração de ponteiros.

(10) Declaração de um Ponteiro:. *. Tipo_de_ponteiro *nome_da_variável; Int *valor1; Float *valorx; Char *valory;. Indica que a variável não armazena um valor, mas sim um endereço para o tipo especificado..

(11) A importância do &  O operador endereço & é usado para indicar o endereço de. uma variável.  Sempre que desejamos fazer um ponteiro apontar (receber o endereço) para uma variável temos que usar este operador.. Ponteiro = &variavelInteira;.

(12) Inicialização de ponteiros.

(13) Inicialização de um Ponteiro: ATENÇÃO: Todos ponteiros devem ser inicializados Ponteiro = &variável; Ponteiro = NULL; Main() { Memória HAM Int valor1, *ponteiro; ENDEREÇO NOME CONTEÚDO valor1 = 25; 0000000001 valor1 25 0000000002 ponteiro 0000000001 ponteiro = &valor1; }.

(14) Usos do * • Multiplicação;. *. • Declaração de ponteiro. • É interpretado como a declaração de uma. variável do tipo ponteiro; • Utilizado como operador de conteúdo. • Será interpretado como o conteúdo do endereço apontado pelo ponteiro;.

(15) Como alterar o conteúdo de uma variável através de um ponteiro? Main() { Int valor1 = 10,*ponteiro; printf(“valor1: %d\n”,valor1); Ponteiro = &valor1; *ponteiro = 15; printf(“valor1: %d\n”,valor1); }.

(16) Exercício 1:  Na main() crie uma variável chamada num do tipo int com o. valor 10.  Crie um ponteiro que aponte para a variável num;  Crie uma função que receba o endereço da variável num e altere o valor para 15 através do uso de ponteiros;  Na main() mostre o valor da variável num;.

(17) Exercício 2:  Crie um programa que declare duas variáveis (inteiro e real). atribua valores para elas e crie dois ponteiros, cada um apontando para uma destas variáveis.  Mostre na tela: O valor e o endereço de memória das variáveis, o valor do ponteiro, o endereço do ponteiro e o valor apontado pelo ponteiro..

(18) Operações com ponteiros.

(19) Operações com ponteiros  Atribuição de ponteiros: Como qualquer variável, um ponteiro pode ser usado no lado direito de uma declaração para atribuir seu valor para um outro ponteiro. Por exemplo: #include <stdio.h> void main(){ int x; int *p1, *p2; x = 101; p1 = &x; p2 = p1; printf(“Endereço da variavel: %p “, p2); //imprime o endereço de x printf(“Valor da variável: %d”, *p2); //imprime o valor de x }.

(20) Operações com ponteiros:  É possível realizar adição e subtração sobre ponteiros. buscando-se endereços de memória (apontando-se para valores) que estejam acima (adição) ou abaixo (subtração) do endereço atual contido no ponteiro.  Por exemplo, para um ponteiro de nome p, a operação p++ faz com que p passe a apontar para o próximo elemento, qualquer que seja o tipo de objeto para o qual p aponta.  Já p += i (p = p + i), faz com que p passe a apontar i elementos além (acima) do objeto para o qual p aponta atualmente..

(21) Operações com ponteiros  Incremento:. p++;  Decremento: p--;  Adição: p = p+2;  Subtração: p = p – 2;. Atenção: Se um ponteiro para um inteiro for incrementado, ele passa a apontar para o próximo inteiro..

(22) Operações com ponteiros  Exercício:. Crie uma variável int e atribua um valor qualquer; Crie um ponteiro que aponte para esta variável; Utilizando ponteiros, imprima na tela o valor contido na variável. Imprima os conteúdos das próximas 1000 posições inteiras na memória..

(23) Operações com ponteiros  Comparação entre ponteiros:. ==. != Compara se os ponteiros são iguais ou diferentes. >, <, <=, >= Compara qual ponteiro aponta para a posição mais alta na memória.

(24) Operações com ponteiros  Exercício:. Crie duas variáveis inteiras, crie dois ponteiros que apontem para as variáveis anteriores. Compare os dois ponteiros e mostre na tela qual ponteiro está mais a “adiante” na memória..

(25) Ponteiros e vetores.

(26) Ponteiros e vetores  A forma de acesso a vetores, vista anteriormente,. usava um índice para acessar cada elemento do vetor.  vetores unidimensionais – vetorx[3];.  COMO O NOME DE UM VETOR É, NA REALIDADE,. UM PONTEIRO PARA O PRIMEIRO ELEMENTO DO VETOR DECLARADO, pode-se usar este nome (ponteiro) como uma forma de acesso alternativa e mais ágil que a usual (via índices)..

(27) Ponteiros e vetores Para acessar o primeiro elemento de um vetor de nome valores: elem = valores[0]; ou elem = *valores;. Para acessar o segundo elemento: elem = valores[1]; ou elem = *(valores + 1);.

(28) Ponteiros e vetores.

(29) Ponteiros e vetores  Exercício:. Crie um vetor de 10 posições, utilizando a maneira vista anteriormente de acessar ponteiros, adicione valores digitados pelo usuário em cada posição do vetor, logo, utilizando o mesmo método, exiba seu conteúdo na tela..

(30) Ponteiros e vetores char str[80], *p1; p1 = str; p1 foi associado ao endereço do primeiro elemento da matriz em str. Na linguagem C, um nome de matriz sem um índice é o endereço para o começo da matriz. O mesmo resultado, um ponteiro para o primeiro elemento da matriz str, pode ser gerado com a declaração abaixo: p1 = &str[0];.

(31) Ponteiros e vetores  Se você desejar acessar o 5º elemento de um vetor pode ser. feito das seguintes maneiras:. str[4]; Ou Frequentemente o uso de aritmética é mais rápido do que o uso de indexação. *(p1+4).

(32) O COMPILADOR C AUTOMATICAMENTE RECONHECE O TIPO BÁSICO DO PONTEIRO E PULA A QUANTIDADE DE ENDEREÇOS RESPECTIVOS.. main () { int *ponteiro, vetor_inteiros[4] = {0, 10, 20, 30}; ponteiro = &vetor_inteiros[0]; printf(“Valor apontado: %d \n”, *(ponteiro+2) ); }.

(33) O COMPILADOR C AUTOMATICAMENTE RECONHECE O TIPO BÁSICO DO PONTEIRO E PULA A QUANTIDADE DE ENDEREÇOS RESPECTIVOS.. main () { int *ponteiro, vetor_inteiros[4] = {0, 10, 20, 30}; ponteiro = &vetor_inteiros[0]; ponteiro += 2; /* igual a: ponteiro = &vetor_inteiros[2]; */ printf(“Valor apontado: %d \n”, *ponteiro); }.

(34) Ponteiros e vetores: Exercício: Na main(), crie um vetor chamado v1 com 10 posições; Crie uma função que receba v1 e atribua em todas as posições do vetor valores recebidos do teclado (utilizando ponteiros); Crie funções ( sempre usando ponteiros) para informar ao usuário: 1. o maior valor no vetor; 2. o menor valor no vetor; 3. o valor médio armazenado no vetor; 4. e o número de valores negativos no vetor..

(35) Ponteiros e vetores  Obtendo o endereço de um elemento da matriz:. É possível atribuir o endereço de um elemento específico de um vetor aplicando-se o operador & para o vetor indexado. p = &x[2];.

(36) Ponteiros e vetores:  Essa declaração é especialmente útil para encontrar uma. substring. O programa abaixo imprimirá o restante de uma string, que é inserida pelo teclado, a partir do primeiro espaço é encontrado. #include <stdio.h> void main() { char s[80]; char *p; int i; printf(“digite uma string: ”); gets(s); //encontra o primeiro espaço ou o fim da string for (i = 0; s[i] && s[i]!=' '; i++); p = &s[i]; printf(p); }.

(37) Ponteiros e vetores multidimensionais.

(38) Ponteiros e matrizes  Acessar vetores multidimensionais (matrizes) é de forma. semelhante a acessar vetores de uma só dimensão. [0][0]. [0][1]. [0][2]. [0][3]. [1][0]. [1][1]. [1][2]. [1][3]. [2][0]. [2][1]. [2][2]. [2][3]. [0][0] [0][1] [0][2] [0][3] [1][0] [1][1] [1][2] [1][3] [2][0] [2][1] [2][2] [2][3]. 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.

(39) Ponteiros e matrizes 0. 1. 2. 3. 4. *(pt+1) -> vet[0][0] *(pt+2) -> vet[0][1] *(pt+3) -> vet[0][2] *(pt+4) -> vet[1][0] *(pt+5) -> vet[1][1] *(pt+6) -> vet[1][2] *(pt+7) -> vet[2][0] .... 5. 6. 7. 8. 9. 10. 11. [0][0]. [0][1]. [0][2]. [0][3]. [1][0]. [1][1]. [1][2]. [1][3]. [2][0]. [2][1]. [2][2]. [2][3].

(40) Ponteiros e matrizes  Exercício:  Declare na main() uma matriz 10x10 do tipo int  Crie uma função que acrescente valores múltiplos de 10 em. todas as posições da matriz utilizando ponteiros  Crie uma função que exiba a matriz, utilizando ponteiros.

(41) Vetores de ponteiros.

(42) Vetores de ponteiros  Podem existir vetores de ponteiros:. A declaração para uma matriz de ponteiros, do tipo int, de tamanho 10 é: int *x[10];  Para atribuir o endereço de uma variável ponteiro chamada var ao terceiro elemento da matriz de ponteiros, você deve escrever: x[2] = &var;  Para encontrar o valor de var, você deve escrever: *x[2];.

(43) Vetores de ponteiros  Exercício:  Crie um vetor de 10 posições do tipo int que será lido pelo. teclado.  Crie um vetor de 10 posições do tipo ponteiro que guardará em cada posição, um endereço do vetor anterior.  Através do uso de vetores, imprima cada valor na tela.

(44) Ponteiros para ponteiros.

(45) Ponteiros para ponteiros  no caso de um ponteiro normal, o valor de um ponteiro é o. endereço da variável que contém o valor desejado. No caso de um ponteiro para um ponteiro, o primeiro ponteiro contém o endereço do segundo ponteiro que aponta para uma variável com o valor desejado:.

(46) Ponteiros para ponteiros  Uma variável que é um ponteiro para um ponteiro deve ser. declarada como tal. Isso é feito colocando-se um asterisco adicional na frente do seu nome.  Por exemplo, esta declaração diz ao compilador que novobalanço é um ponteiro para um ponteiro do tipo float: float **novobalanço;.

(47) Ponteiros para ponteiros  Para acessar o valor desejado apontado indiretamente por um. ponteiro para um ponteiro usa-se duas vezes o * #include <stdio.h> void main(){ int x, *p, **q; x = 10; p = &x; q = &p; printf(“%d”, **q); //imprime o valor de x }.

(48) Ponteiros para ponteiros  Exercício:  Crie um programa que tenha uma variável valor=5;  Crie um ponteiro chamado pt1 que aponte para valor;  Crie um ponteiro chamado pt2 que aponte para o ponteiro pt1;  Crie um ponteiro chamado pt3 que aponte para o ponteiro pt2;  Imprima e compare as diferenças entre:  valor; &valor;  &pt1; pt1; *pt1;  &pt2; pt2; *pt2; **pt2;  &pt3; pt3; *pt3; **pt3; ***pt3;.

(49)

(50)

Referências

Documentos relacionados

Local de realização da avaliação: Centro de Aperfeiçoamento dos Profissionais da Educação - EAPE , endereço : SGAS 907 - Brasília/DF. Estamos à disposição

Este artigo está dividido em três partes: na primeira parte descrevo de forma sumária sobre a importância do museu como instrumento para construção do conhecimento, destaco

O termo extrusão do núcleo pulposo aguda e não compressiva (Enpanc) é usado aqui, pois descreve as principais características da doença e ajuda a

Para Piaget, a forma de raciocinar e de aprender da criança passa por estágios. Por volta dos dois anos, ela evolui do estágio sensório motor, em que a ação envolve os

A decisão por uma revista bilíngüe para o Cone Sul, também remete à união entre as populações que o compõem. Os idiomas espanhol e português são os escolhidos, já que são

São considerados custos e despesas ambientais, o valor dos insumos, mão- de-obra, amortização de equipamentos e instalações necessários ao processo de preservação, proteção

Visto que o Código de Defesa do Consumidor – CDC (Lei nº 8.078/1990), em seu artigo 4º, traz como objetivo “o atendimento das necessidades dos consumidores, o respeito à

A interação da educação com a tecnologia forja um verdadeiro “saber”- de práticas e de vida (BASTOS, 1997). A problemática abordada nesta pesquisa está relacionada ao mau