capítulo 2

Upload: fabricio-carvalho

Post on 03-Mar-2016

216 views

Category:

Documents


0 download

DESCRIPTION

pesquisa ponteiros

TRANSCRIPT

Captulo 3PonteirosCada registro tem umendereona memria do computador. (Voc pode imaginar que o endereo de um registro o endereo de seu primeiro campo, mas essa detalhe irrelevante.) muito comum usar umponteiropara guardar o endereo de um registro. Dizemos que um tal ponteiroapontapara o registro. Por exemplo,struct dma *p; /* p um ponteiro para registros dma */struct dma x;p = &x; /* agora p aponta para x */(*p).dia = 31; /* mesmo efeito que x.dia = 31 */[Cuidado! A expresso*p.dia, que equivale a*(p.dia), tem significado muito diferente de(*p).dia.]A expressop->mes uma abreviatura muito til para a expresso(*p).mes:p->mes = 8; /* mesmo efeito que (*p).mes = 8 */p->ano = 1998;Registros podem ser tratados como um novotipo-de-dados. Por exemplo,typedef struct dma data;data x;data *p;p = &x;Uma vez que variveis do tipo estrutura so tratadas exatamente da mesma forma que variveis de tipos bsicos, possvel definir variveis do tipo ponteiro para estruturas, como emstruct dados_pessoais *pa;Componentes de uma estrutura podem ser ponteiros para outros tipos de dados ou estruturas. Em algumas situaes, pode haver a necessidade de ter como um dos componentes da estrutura um ponteiro para um tipo da prpria estrutura. Um exemplo tpico a construo de listas ligadas, compostas por ns onde um dos dados armazenados em cada n um ponteiro para o prximo n. Esta situao seria representada comostruct no_lista {/* conteudo do no: */.../* ponteiro ao proximo no: */struct no_lista *proximo;};Uma forma bsica de acesso aos membros de uma estrutura (atravs do operador.) j foi descrita neste captulo. A outra forma de acesso a membros de estruturas facilita a notao quando ponteiros para estruturas esto envolvidos. Para ilustrar esta forma, suponha que uma funo que l os dados de um aluno no programa acima retorna na verdade um ponteiro para uma estrutura do tipodados_pessoais. Por exemplo,struct dados_pessoais *le_aluno(); /* prototipo */struct dados_pessoais *aluno_pt; /* ponteiro */

aluno_pt = le_aluno();O acesso a membros da varivelaluno_ptpoderia ser feito da forma usual, ou seja,*aluno_pt uma estrutura, ento seria possvel acessar seus membros como emprintf("%s nasceu em %2d/%2d/%4d\n",(*aluno_pt).nome,(*aluno_pt).nascimento.dia,(*aluno_pt).nascimento.mes,(*aluno_pt).nascimento.ano);A notao simplificada utiliza o ponteiro->(seta) para substituir uma construo na forma(*A).MporA->M. O exemplo original poderia ser reapresentado integrando estes ltimos aspectos comoint main() {struct data hoje;struct dados_pessoais *aluno_pt;int idade;/* prototipos: */int calc_idade(struct dados_pessoais, struct data);struct data le_hoje();struct dados_pessoais *le_aluno();

/* obtem dados para hoje e aluno */hoje = le_hoje();aluno_pt = le_aluno();

idade = calc_idade(*aluno_pt, hoje);

/* apresenta resultado */printf("Idade de %s: %d\n",aluno_pt->nome,idade);

return(0);}

Bibliografiahttp://www.ime.usp.br/~elo/IntroducaoComputacao/Funcoes%20passagem%20de%20parametros.htmhttp://gracianotorrao.com/2008/05/19/funcoes-passagem-de-parametros-por-valorreferencia-em-cc/http://www.ime.usp.br/~pf/algoritmos/aulas/stru.htmlhttp://en.wikipedia.org/wiki/Struct_(C_programming_language)http://www.di.ufpb.br/liliane/aulas/estruturas.htmlhttp://linguagemc.com.br/struct-em-c/http://www.tiexpert.net/programacao/c/struct.phphttp://www.tiexpert.net/programacao/c/ponteiro-struct.phphttp://www.dca.fee.unicamp.br/cursos/EA876/apostila/HTML/node143.html