Buscar

Unidade_03_4_Linguagem_C_Ponteiros_Sergio_Diniz

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

IESB
IESB
APC
Introdução à Linguagem C
(continuação)
IESB
APC 
Linguagem C – Ponteiros
Ponteiro (pointer) é uma variável que contém o endereço de um objeto de dados, em geral uma outra variável. Essa é a razão para o seu nome: ele aponta para outra variável.
Declaração:
 int *ptr; Esta declaração define a variável ptr como um ponteiro para uma variável do tipo int (número inteiro).
O ponteiro pode ser declarado para qualquer tipo legal de variável em C (char, int, float, double, etc), além de void. 
IESB
APC 
int var; int *ptr; var = 10; ptr = &var;
Na seqüência acima, são declarados uma variável tipo int (var) e um ponteiro para o mesmo tipo (ptr). A terceira linha atribui o valor 10 a var e a última linha inicializa o ponteiro ptr com o endereço de “var”, “ptr” passa a ter o endereço de “var” e não seu conteúdo (reparar no &).
Linguagem C – Ponteiros
IESB
APC 
Linguagem C – Ponteiros
Esquematicamente:
IESB
APC 
Linguagem C – Ponteiros
int novaVar = *ptr; Atribui o conteúdo da variável “var” a variável novaVar, lido indiretamente através de ptr (reparar no *).
*ptr = 20; modifica o valor de “var” para 20, ou seja, “var” é alterada de forma indireta através de “ptr” que contém o endereço de “var” (reparar no *). 
IESB
APC 
Linguagem C – Ponteiros
um ponteiro não inicializado poderá ter conteúdo nulo ou aleatório, a depender da alocação do sistema. Nessa condição, se o conteúdo apontado for modificado, algumas posições de memória terão seus valores indevidamente alterados e as conseqüências serão imprevisíveis.
Aplicações de ponteiros: • Permite passagem por referência (passa o endereço dos dados ao invés de uma cópia dos mesmos), muito utilizado na passagem e retorno de valores de funções -Alocação dinâmica de memória.; -Strings (relacionado com o item anterior);
IESB
APC 
Aplicações de ponteiro (continuação):
-Criação de estruturas de dados como listas encadeadas e árvores; -Em programação de mais baixo nível, como em drivers, sem ponteiros você não sai do lugar.
Linguagem C – Ponteiros
IESB
APC 
Exemplo de programa:
main() 
{ 
int var, *p;
var=10; 
p=&var;
printf("O valor da variavel e': %d \n", *p); 
printf("O endereco de memoria de var e': %p \n", p); printf("O endereco de memoria do ponteiro e': %p \n", &p); *p=15; 
printf("O novo valor da variavel e': %d \n", var); 
return (0); 
}
Linguagem C – Ponteiros
IESB
APC 
Linguagem C – Ponteiro
 modifique o programa abaixo para que o valor 3 seja atribuido a variável j:
Main ()
{
Int j, *pj;
*pj = 3;
}
IESB
APC 
Main ()
{
Int j, *pj;
pj=&j;
*pj = 3;
}
Explique a diferença entre
p++; (*p)++; *(p++);
Linguagem C – Ponteiro
Solução:
IESB
APC 
Linguagem C – Ponteiro
int main(void) 
{
float x, y; /* x e y sao variaveis reais */
float *p1, *p2; /* p1 e p2 sao ponteiros para variaveis reais, *p1 e *p2 sao reais */
x = 2.5;
y = 0.8;
p1 = &x; /* p1 aponta para x */
y = *p1; /* y agora vale 2.5 */
*p1 = 1.0; /* x agora vale 1.0 */
*p1 = *p1 + 5.0; /* x agora vale 6.0 */
p2 = p1; / * p2 tambem aponta para x */
return 0;
}
IESB
APC 
Linguagem C – Ponteiro
O seguinte programa gera um erro:
#include <stdio.h>
int main(void)
{
float *x, y;
y = 2;
*x = 3;
printf("%f %f\n", y, *x);
return 0;
}
IESB
APC 
 Corrigindo:
#include <stdio.h>
int main(void)
{
float *x, y;
y = 2;
x = &y; // atribui o endereço de y a x
*x = 3;
printf("%f %f\n", y, *x); // O que será escrito?
return 0;
}
Linguagem C – Ponteiro
IESB
APC 
Seja o seguinte trecho de programa:
int i=3,j=5;
int *p, *q;
p = &i;
q = &j;
Qual é o valor das seguintes expressões ?
p == &i;
*p - *q;
**&p;
3* (- *p/(*q)+7)
Linguagem C – Ponteiro
IESB
APC 
#include <stdio.h>
 int main () {
 int vet [10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
 int *p;
 p=vet; /* Atribui o endereço da primeira posição do vetor VET à variável P */
printf ("O terceiro elemento do vetor e: %d", *(p+2));
// (p+2) incrementa o endereço em duas posições, //*(p+2) aponta para o conteúdo deste endereço, ou
// seja, para o terceiro elemento do vetor vet[2]. 
 return(0);
 }
OBS: p=&vet[2] atribui o endereço do terceiro elemento ao ponteiro p. 
Linguagem C – Ponteiro e Vetores
IESB
APC 
Qual é a saída do programa a seguir?
#include <stdio.h>
int main ()
{
int num,valor;
int *p;
num=55;
p=&num;     /* Pega o endereco de num */
valor=*p;   /* Valor e igualado a num de uma maneira indireta */
printf ("\n\n%d\n",valor);
printf ("Endereco para onde o ponteiro aponta: %p\n",p);
printf ("Valor da variavel apontada: %d\n",*p);
return(0);} 
Linguagem C – Ponteiro e Vetores
IESB
APC 
Qual é a saída do programa a seguir?
#include <stdio.h>
int main ()
{
int num,*p;
num=55;
p=&num;     /* Pega o endereco de num */
printf ("\nValor inicial: %d\n",num);
*p=100; /* Muda o valor de num de uma maneira indireta */
printf ("\nValor final: %d\n",num);	
return(0);
} 
Linguagem C – Ponteiro e Vetores
*
O objetivo desse seminário é apresentar AspectJ: uma ferramenta que possibilita o desenvolvimento de aplicações com base num novo paradigma de programação conhecido como Programação Orientada a Aspectos.

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando