18.00-ponteiros-1

Upload: claudio-k-filho

Post on 10-Mar-2016

6 views

Category:

Documents


0 download

DESCRIPTION

Ponta da ads fio eqa adsfj

TRANSCRIPT

  • INSTITUTO FEDERAL DE EDUCAO, CINCIA E TECNOLOGIACAMPUS NATAL - CENTRAL

    DIRETORIA DE EDUCAO E TECNOLOGIA DA INFORMAOAv. Sen. Salgado Filho, 1559, Natal/RN, 59015-000. Fone/FAX (084) 4005-2637

    E-mail: [email protected] - Site: http://www.ifrn.edu.br/dietinf

    Curso: - Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas- Superior de Tecnologia em Redes de Computadores

    Disciplina: - Algoritmos e Tcnicas de Programao- Introduo Programao

    Professor: Fabiano Papaiz

    PONTEIROS

    Endereos de MemriaJ dissemos vrias vezes que as variveis ficam armazenadas em determinados

    espaos na memria do computador. Ao trabalhar com uma varivel, geralmente no precisamos

    nos preocupar com o endereo desta varivel, pois o compilador cuida destes detalhes tcnicos.

    Entretanto, pode ser bastante til saber o endereo de uma varivel. Em C, utilizamos

    o operador de endereo & para acessar o endereo que uma varivel ocupa na memria. Sua

    sintaxe muito simples, bastando inserir o operador & na frente do nome de uma varivel:&x; //retorna o endereo da varivel x&nome; //retorna o endereo da varivel nome

    O programa abaixo cria uma varivel inteira e utiliza printf para exibir o valor da

    varivel e depois o seu endereo - utilizando o operador &.

    A sada ser algo parecido com:

    Na memria seria algo como:

    2293619 ...2293620 1242293621 ...

    1

  • O operador de endereo utilizvel tambm em matrizes. Quando utilizamos este

    operador em uma matriz, temos o endereo inicial da matriz, que nada mais do que o endereo

    do primeiro elemento da matriz. Tambm podemos utilizar o operador & para acessar os

    endereos de cada elemento de uma matriz, como vemos no exemplo abaixo:

    Sada:

    PonteirosEm linguagem de programao, chamamos de ponteiros as variveis especiais que

    armazenam endereos de memria. Como j vimos, as variveis possuem trs atributos bsicos:

    seu nome,

    o valor armazenado por ela

    o endereo de memria onde ela est armazenada.

    Os ponteiros, ao invs de armazenar valores, armazenam endereos de memria. Ao

    utilizar um ponteiro, podemos acessar este endereo e manipular o valor que est armazenado l

    dentro.

    Ponteiros so utilizados constantemente em C. Por exemplo, quando trabalhamos com

    matrizes, sem saber estamos trabalhando com ponteiros: a linguagem C utiliza ponteiros para

    acessar as diversas posies de uma matriz.

    2

  • Declarando PonteirosA declarao de ponteiros bem parecido com a declarao de variveis. Assim como

    uma varivel comum, ponteiros precisam ter tipos (como int, float, char) para indicar ao compilador

    qual o tipo de valor para o qual o ponteiro aponta. Alm disso, utilizamos o asterisco * antes do nome, para indicar ao compilador que estamos declarando um ponteiro e no uma varivel

    simples. A sintaxe da declarao de um ponteiro vista abaixo:int *x; //declara um ponteiro para um intchar *c; //declara um ponteiro para um charfloat *media; //declara um ponteiro para um float

    Aps declarar um ponteiro, importante atribuir o endereo que ser armazenado por

    ele. Isto feito utilizando o operador & para obter o endereo de uma varivel. A atribuio feita

    da mesma forma que atribuimos valores para uma varivel. Suponha que tenhamos, em um

    programa qualquer, um ponteiro chamado referencia e uma varivel chamada valor. Caso

    desejssemos que o ponteiro referencia armazenasse o endereo da varivel valor, faramos a

    seguinte atribuio:

    referencia = &valor;

    Desreferenciando um PonteiroDesferenciar um ponteiro nada mais do que acessar o valor que est armazenado

    no endereo de memria armazenado por ele. Esta operao feita pelo operador * (que chamamos formalmente de asterisco de indireo). Assim como utilizamos o operador de

    endereo & para acessar o endereo de uma varivel, utilizamos o asterisco de indireo para

    obter o valor que est dentro da posio de memria guardada pela ponteiro. Para utiliz-lo basta

    adicionar o * antes do nome de um ponteiro em qualquer operao ou comando dentro um programa:

    int i = *p; //obtem o valor armazenado no endereo de p

    O programa a seguir bastante parecido com os anteriores, mas utiliza o asterisco de

    indireo para obter o valor da posio de memria indicada pelo ponteiro. Alm disso, este valor

    modificado utilizando este mesmo operador:

    3

  • Sada:

    Esta operao til para acessar e modificar valores dentro de posies de memria.

    Um ponteiro com o asterisco de indireo se comporta como uma varivel comum. Podemos

    utiliz-lo em comandos, expresses, atribuies e onde mais for necessrio.

    Exerccios:

    1. Se todo uma varivel, o que &todo?

    2. Escreva um programa em C que contenha as declaraes abaixo. Para cada varivel mostre o endereo da varivel utilizando a funo printf.

    int x, yu, h;char ch, dig;long grande;float salario;double lucrobancos;

    4

  • 3. Considere o seguinte trecho de um programa:int *p;int x=9;p=&x;printf("%d",&p);printf("%d",*p);printf("%d",p);

    O que ser impresso, conceitualmente, por cada comando printf?

    4. Na expresso float *ptr, oat representa?(a) A varivel ptr.

    (b) O endereo de ptr.

    (c) A varivel apontada por ptr.

    (d) O tipo da varivel apontada por ptr.

    (e) O valor de ptr.

    5. Considere o seguinte trecho de um programa:main(){ int f=10, *ptr; : printf("%d",*ptr);}

    Insira o cdigo necessrio para que o comando printf exiba o valor da varivel f.

    5