Ciência da Computação

Propaganda
PROGRAMAÇÃO
ESTRUTURADA II
Profª. Noeli
Ciência da Computação
1
PONTEIROS
Continuação...
CIÊNCIA DA COMPUTAÇÃO
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
Relembrando Ponteiros...
p
x
89422
90001
10
p = &x
*p é 10
CIÊNCIA DA COMPUTAÇÃO
89422
p
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
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.
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
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
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
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");
for(i=0; i < x; i++)
{
printf("%d\n", *(v + i)); //mostrando os elementos através de v
}
system("PAUSE");
}
Ponteiros
Usaremos ponteiros para:
•Passagem de parâmetros para funções;
•Alocação dinâmica de memória.
CIÊNCIA DA COMPUTAÇÃO
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
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");
}
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
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
Download