A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

PROGRAMAÇÃO ESTRUTURADA II

Apresentações semelhantes


Apresentação em tema: "PROGRAMAÇÃO ESTRUTURADA II"— Transcrição da apresentação:

1 PROGRAMAÇÃO ESTRUTURADA II
Profª. Noeli Ciência da Computação 1

2 PONTEIROS Continuação... CIÊNCIA DA COMPUTAÇÃO

3 Relembrando Ponteiros...
Um ponteiro é um tipo especial de variável cujo valor é um endereço. Para declararmos um ponteiro para um inteiro utilizamos a seguinte sintaxe: int * p; p é uma variável que armazena endereço de memória. Dentro do código *p é o conteúdo de p, ou seja, o valor armazenado no objeto cujo endereço é  p . Exemplo: int *p, x = 10; p = &x; printf(“%d”,*p); CIÊNCIA DA COMPUTAÇÃO CIÊNCIA DA COMPUTAÇÃO

4 Relembrando Ponteiros...
x 89422 10 90001 89422 p p = &x *p é 10 CIÊNCIA DA COMPUTAÇÃO CIÊNCIA DA COMPUTAÇÃO

5 Aritmética com Ponteiros
Se pi é um ponteiro para um inteiro, então pi + 1 é o ponteiro para o inteiro imediatamente seguinte ao inteiro *pi na memória. pi – 1 é o ponteiro para o inteiro imediatamente anterior a *pi; pi + 2 é o o ponteiro para o segundo inteiro depois de *pi e assim por diante; CIÊNCIA DA COMPUTAÇÃO

6 Aritmética com Ponteiros
Por exemplo: Suponha que determinada máquina use endereçamento de bytes, que um inteiro exija quatro bytes e que o valor de pi seja 100 (pi aponta para o inteiro *pi na posição 100). Sendo assim, o valor de pi – 1 é 96, o valor de pi + 1 é 104 e o valor de pi + 2 é 108. O valor de *(pi - 1) é o conteúdo dos quatro bytes (96,97,98,99), interpretados como um inteiro; O valor de *(pi + 1) é o conteúdo dos bytes 104, 105,106,107, interpretados como inteiro.

7 Aritmética com Ponteiros
Atenção: Devemos observar a diferença entre * pi + 1, que se refere a 1 somado ao inteiro *pi, e *(pi + 1), que se refere ao inteiro posterior ao inteiro na posição pi. CIÊNCIA DA COMPUTAÇÃO

8 Vetores e Ponteiros Os elementos de qualquer vetor
têm endereços consecutivos na memória do computador.  Depois da declaração int v[100]; a variável v é, essencialmente, um ponteiro para o primeiro elemento do vetor.  Mais precisamente, v é uma espécie de "ponteiro constante":  você não pode mudar o valor de v. CIÊNCIA DA COMPUTAÇÃO

9 Vetores e Ponteiros Como v contém o endereço do primeiro elemento do vetor, a expressão  v+1  é o endereço do segundo elemento,  v+2  é o endereço do terceiro elemento, etc.  Se i é uma variável do tipo int então as expressões   v + i   e   &v[i]   têm exatamente o mesmo valor.  Portanto, *(v+i) = 87; tem o mesmo efeito que v[i] = 87; CIÊNCIA DA COMPUTAÇÃO

10 Vetores e Ponteiros - Exemplo
#include <stdio.h> #include <stdlib.h> #define x 10 void main() { int i, v[x]; printf("\nInforme %d valores inteiros: ",x); for(i=0; i < x; i++) scanf("%d", v + i);//leitura utiliznado o ponteiro v } printf("\nMostrando os elementos\n"); printf("%d\n", *(v + i)); //mostrando os elementos através de v system("PAUSE");

11 Ponteiros Usaremos ponteiros para:
Passagem de parâmetros para funções; Alocação dinâmica de memória. CIÊNCIA DA COMPUTAÇÃO

12 Passagem de Parâmetros por Referência
Para poder atuar/alterar o valor original, a função, tem que receber o parâmetro por referência, ou seja, a função/procedimento tem que receber uma referência ao endereço de memória da variável passada como parâmetro e não uma simples cópia do valor da variável. Ao receber um parâmetro por referência, as alterações que a função/procedimento fizer, serão feitas diretamente na variável original, pois agora, a função/procedimento tem acesso ao endereço da variável na memória e não mais apenas uma cópia do seu valor. CIÊNCIA DA COMPUTAÇÃO

13 Exemplo – Passagem de parâmetro por referência
#include <stdlib.h> #include <stdio.h> void troca(float *pa, float *pb) { float aux; aux = *pa; *pa = *pb; *pb = aux; } void main() float a,b; printf("\nDigite dois valores: "); scanf("%f %f",&a,&b); printf("\na = %2.0f\nb = %2.0f",a,b); troca(&a,&b); printf("\nDepois de efetuada troca com a utilização de ponteiros..."); printf("\na = %2.0f \nb = %2.0f\n\n", a, b); system("PAUSE");

14 Concluindo Na passagem por valor é passado apenas uma cópia do valor da variável. Os comandos executados dentro do proc./função chamado não irão alterar o valor original da variável. Já na chamada por referência, o endereço da variável, na memória, é passado para o procedimento/função que foi chamado. Com isso, as alterações feitas pelo procedimento, na variável, irão alterar o valor original da variável, pois estão atuando diretamente sobre esta variável, ou melhor, no endereço de memória da variável. CIÊNCIA DA COMPUTAÇÃO

15 EXERCÍCIO 1 - Elabore um programa que declare 4 variáveis do tipo inteiro e 4 do tipo ponteiro de inteiro, e faça com que as variáveis ponteiro apontem para as variáveis inteiro. Coloque comandos que permitam modificar os valores das variáveis inteiras através das variáveis ponteiro. Faça a simulação passo-a-passo para visualizar o que está acontecendo em cada linha do programa. CIÊNCIA DA COMPUTAÇÃO


Carregar ppt "PROGRAMAÇÃO ESTRUTURADA II"

Apresentações semelhantes


Anúncios Google