ponteiros - uspwiki.icmc.usp.br/images/9/9a/ssc0304-2016-01_aula_11.pdf · ponteiros (pi*pf, pi/pf)...

Post on 21-Sep-2020

13 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Ponteiros

IntroduçãoàCiênciadaComputaçãoI

Memória

int main () { int x; x = 10; return 0; }

Memória

16

01234567891011121314151617181920

x

int y = x + 6; printf(“%d”, x);

scanf(“%d”, &x );

y

10

EndereçodeMemória

•  Ooperador“&”quandoaplicadosobreumidenLficador(nomedevariável,porexemplo)retornaoseuendereço

Memória01234567891011121314151617181920

scanf(“%d”, &x );

x

Ponteiros

•  Umponteiroéumavariávelquecontém(armazena)umendereçodememória

•  Declaração:%po_dado*nome_ponteiro;

onde"*"indicaqueavariáveléumponteiro

•  Ex: intx; int*px;/*compiladorsabequepxéponteiro*/

/*pxéumponteiroparainteiro*/

Oqueéumponteiro?

4

01234567891011121314151617181920

int x = 10, *pi; pi = &x; printf("&x: %p pi: %p", &x, pi);

x pi

10

Saídaemtela: &x:0x4pi:0x4

Comousarumponteiro?

10

4

01234567891011121314151617181920

int x = 10, *pi, y; pi = &x; y = *pi;

x pi

10

y

O operador “*” quando aplicado sobre um ponteiro retorna o dado apontado

ULlizandoPonteiros#include <stdio.h> int main() { int x = 10; int *pi;

pi = &x; /* *pi é igual a 10 */ (*pi)++; /* *pi é igual a 11 */ printf("%d" , x);

return 0; }

aoalterar*piestamosalterandooconteúdodex

ULlizandoPonteiros#include <stdio.h> int main() { int x = 10; int *pi, *pj;

pi = &x; /* *pi == 10 */ pj = pi; /* *pj == 10 */ (*pi)++; /* (*pi, *pj, x) == 11 */ (*pj)++; /* (*pi, *pj, x) == 12 */ printf("%d", x); /* Escreverá 12 */

return 0; }

PONTEIROS&ARRAYS

ReferenciandoArrays

•  Pode-sereferenciaroselementosdeumarrayatravésdeponteiros

•  Ex:floatm[]={1.0,3.0,5.75,2.345}; float*pf; pf=&m[2]; prinj("%f",*pf);/*Escreve5.75*/

ReferenciandoElementos

•  Pode-seuLlizarponteirosecolchetes:floatm[]={1.0,3.0,5.75,2.345};float*pf;pf=&m[2];prinj("%f",pf[0]); /*==>5.75*/

•  NotequeovalorentrecolcheteséodeslocamentoaserconsideradoaparLrdoendereçodereferência•  pf[n]=>indican-ésimoelementoaparLrdepf

PONTEIROS&PARÂMETROSDEFUNÇÕES

PassagemdeInformações

•  Argumentospassadosporreferência– Quandochamada,afunçãopassaareferenciar(apontar)avariávelinformada

– Portantooprocessoconsisteeminformaroendereçodavariávelparaoqueoparâmetroformalpossareferenciá-lo.

– OsargumentosdeixamdeexisLrapósaexecuçãodométodo,porémasvariáveisinformadasequeforamreferenciadaspermanecem(poisnãosãodadasporesteblocodecomandos).

15

Exemplo#include<stdio.h>/*Protó0pos*/voidfuncPorVarlor(inta);voidfuncPorRefer(int*b);intmain(){intx=0,y=0;funcPorValor(y);prinj("%d%d\n",x,y);funcPorRefer(&y);prinj("%d%d\n",x,y);return0;}

/*Definiçãodassubro0nas*/voidfuncPorVarlor(inta){a=1;}voidfuncPorRefer(int*b){*b=2;/*...oconteúdoapontadoporbrecebe2*/}•  Notequeasvariáveisxeysãolocais

afunçãomain,enquantoosparâmetrosaebsãolocaisafuncPorValorefuncPorRefer,respecLvamente.

OperaçõesVálidasSobrePonteiros

Éválido•  somarousubtrairum

inteiroaumponteiro(pi±int)

•  incrementaroudecrementarponteiros(pi++,pi--)

•  subtrairponteiros(produzuminteiro)(pf-pi)

•  compararponteiros(>,>=,<,<=,==)

Nãoéválido•  somarponteiros

(pi+pf)

•  mulLplicaroudividirponteiros(pi*pf,pi/pf)

•  operarponteiroscomdoubleoufloat(pi±2.0)

Exercícios

1)  Façaumprogramaqueleia2valoresinteirosechameumafunçãoquerecebaestas2variáveisetroqueoseuconteúdo,ouseja,estaroLnaéchamadapassandoduasvariáveisAeBporexemplo,eapósaexecuçãodaroLnaAconteráovalordeBeBteráovalordeA.

2) Escrevaumafunçãoquedadoumnúmerorealpassadocomoparâmetro,retorneaparteinteiraeapartefracionáriadestenúmero.

Exercícios

3) Crieumafunçãoquerecebeoscoeficientesdeumafunçãodo2o.graueretornaasraízessemusarvetor.

4) Façaumprogramaleiaumvetorde5inteirose,depoisdeler,imprimaosvalores,semusaranotaçãodevetor[].

Exercícios5)  Façaumprogramaqueachaomaioreo

menorinteirodentrodeumvetorde10inteiros.Obs:usarapenasasvariáveisaseguir: intv[10],i,*maior,*menor;

PráLca6

1) Crieumafunçãoquerecebeotempototaldeumprocessoemsegundos,eretornaoequivalenteemhoras,minutosesegundos.

2) Crieumafunçãoquerecebeumamatriz4x4e

retorna(porponteiro)umvetorde4elementosquecorrespondemaomaiorvalordecadacolunadamatriz.

top related