Baixe o app para aproveitar ainda mais
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=# /* 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=# /* 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.
Compartilhar