Buscar

AED Trabalho de Ponteiros

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 4 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Algoritmos e Estrutura de Dados
Material de Apoio
Ponteiros
  
Da mesma maneira que existem em C variáveis do tipo char, int e float, existem variáveis do tipo ponteiro. As variáveis do tipo ponteiro armazenam endereços de memória e são utilizadas por 3 razões específicas na programação:
permitem a modificação de argumentos de funções: permitem que uma função altere valores de variáveis não globais e não locais a ela através da referência ao endereço de memória da variável passada como parâmetro para a função; 
permitem o uso de rotinas de alocação dinâmica de memória: alocação e desalocação de memória em tempo de execução conforme a necessidade do programa; 
aumento de eficiência em determinadas rotinas. 
A forma de declaração de uma variável ponteiro é: 
tipo  *nome_variável
onde tipo é o tipo de variável apontada pela variável ponteiro. 
  
Por exemplo: 
float  *p;      // p é um ponteiro de float
Ou seja, p apontará para uma região de memória que armazena um valor float. 
 
Operadores para Ponteiros
Existem dois operadores especiais para trabalhar com ponteiros. São eles: 
*  -  conteúdo do endereço apontado por 
&   -  endereço de 
ATENÇÃO:  Quando * é usado na declaração de uma variável ponteiro ele simplesmente indica que a variável é do tipo ponteiro de um tipo. O significado de * descrito acima não serve para declaração de ponteiros!
Observe o exemplo abaixo: 
1   main( ) { 
2   int v1, v2, * p, * q 
3   v1 = 3; 
4   v2 = 12; 
5   p  = &v1;    // p recebe o endereço de memória da variável v1 
6   q = p;         // copia o endereço guardado em p para q 
7   *q = 44;      // altera o valor armazenado no endereço apontado por q 
8   } 
  
 
Neste exemplo, p e q são variáveis do tipo ponteiro de inteiro. Na linha 6 é feita uma atribuição à variável q, que passa a ter o mesmo valor armazenado em p: o endereço de v1. Ao modificarmos o conteúdo apontado por q na linha 7,  alteraremos o valor guardado em v1, visto que a variável q aponta para v1. 
Exercícios
1) O que é um ponteiro ? E para que serve um ponteiro ?
2) Qual da Seguinte instrução abaixo são corretas para declarar um ponteiro?
Int _ptr x;
Int *ptr;
*int ptr;
*x;
3) Na expressão float *pont , o que é do tipo float /
A variável pont
O endereço de pont
A variável apontada por pont
Nenhuma alternativa
4) Assumindo que o endereço de num foi atribuído a um ponteiro pnum, quais das seguintes expressões são verdadeiras? (pode assinalar mais de uma se houver)
Num == &pnum
Num == *pnum
Pnum == *num
Pnum == &num
5) Qual é a instrução que deve ser adicionada ao programa seguinte para que ele trabalhe corretamente ?
Main()
{
 	Int j, *ppj;
	_____________
	*pj = 3;
}
6) Assumindo que o endereço da variável x foi atribuído a um ponteiro px, escreva uma expressão que não usa x, e divida x por 5;
Qual o valor das seguintes expressões:
Int i=3, j=5;
Int *p=&i;
Int *q= &j;
P == &i ;
*p-*q;
**&p;
7) Qual será a saída deste programa?
Main()
{
	Int i=5, *p=&i;
	Printf(“%u %d %d %d %d \n”, p, *p+2, **&p, 3**p, **&p+4);
}
8) Seja a seguinte sequência de Instruções em c:
Int *pti;
Int i=10;
Pti=&i;
Qual afirmativa é falsa?
Pti armazena endereço de i
*pti é igual a 10
Ao se executar *pti=20; i passara a ter o valor de 20
Ao se alterar o valor de i, *pti será modificado
Pti é igual a 10
9) Considerando as variáveis e ponteiros definidos abaixo, quais são as atribuições permitidas?
Int x, *ptx, **pp;
Float a, *pta, **pf;
X=100;
*pta=&a;
Ptx=&a;
*pf = &a;
Pp=&pta;
**pf=7.9;
*ptx=20;
Ptx=&x;
Pp=&x;
Pf=&pta;
10) Considerando as variáveis e ponteiros definidos abaixo, quais são as atribuições permitidas?
Int i, *pi, **ppi;
Float f, *pf, **ppf;
I=f;
Pf=&i;
*pf=5.9;
*ppi=π
*pf=10;
F=i;
Pi=&f;
*pi=7.3;
Ppf=&pf;
**ppi=100;
11) Dadas as declarações abaixo, qual o valor dos itens:
Int x=10, *px=&x, **ppx=&x;
Float y=5.9, *py=&y, **ppy=&py;
X=FFA0 / Y=FFB4 / PX=FFF0 / PY=FC6 / PPY=FFA6 / PPX=FFD4 (MEMORIA)
X= 
 Py=
 Px =
 &y =
 *px =
Y =
 *ppx = 
Py = 
&x =
Py++=
*px--=
**ppy=
&ppy = 
*&px=
**ppx++;
Px++=
&ppx=

Outros materiais