Você está na página 1de 70

INSTITUTOFEDERALDEEDUCAO,CINCIAETECNOLOGIADESANTACATARINA

CAMPUSFLORIANPOLIS
DEPARTAMENTOACADMICODEELETRNICA

ProgramaoC
Ponteiros
FernandoS.Pacheco

Sumrio

Ponteiros

Recapitulandovariveis

Aplicaes

Operadoreseinicializao

Argumentodefunes

Aritmticadeponteiros

Relaocomvetores(arrays)

Exemplosecuidados

Ponteirosconst

ProgCPonteiros

Ponteiros

ConceitoimportantssimoemC

RecapitulandovariveisemC

Varivelumespaoemmemriacomumnome
especficoecomvalorquepodemudar

Tamanhodoespaodependedotipodavarivel
Memriahipotticaorganizadaembytes
Endereo(byte)

0xA0

0xA1

0xA2

0xA3

0xA4

0xA5

Valor
Nome
Varivel

k
ProgCPonteiros

Recapitulandovariveis

Quandosedeclara
chark;

1byte(8bits)dememriareservado(para
guardarumvalorinteiro)
Umatabeladesmbolosmapeiaoendereo
reservadoparaoidentificadork

ProgCPonteiros

Recapitulandovariveis

Quando,noprograma,definese
k=2;

Ovalor2colocadonaporodememria
reservadaparak

Endereo(byte)
Valor
Nome
Varivel

0xA0

0xA1

0xA2

0xA3

0xA4

0xA5

00000010

k
ProgCPonteiros

Recapitulandovariveis

Observequeaoelementokestoassociadas
duasinformaes

Oprpriointeiroqueestarmazenado(2,p.ex.)

Ovalordalocalizaodememria,ouseja,o
endereodek

Hsituaesemqueoquesedeseja
armazenarumendereo
Ponteiroumavarivelquearmazenaum
endereodememria,ouseja,apontaparaum
ProgCPonteiros
6
endereo

Ponteiros

Nafigura,acaixarepresentaumespaoem
memria

var1onomedeumdessesespaos

2ovalorqueestarmazenadonesseespao

0xA0oendereodesseespaonamemria
Endereo(byte)
Valor
Nome
Varivel

0xA0

0xA7

00000010

0xA0

var1

ptr_var1

ProgCPonteiros

Ponteiros

ptr_var1umaoutravarivel

ptr_var1armazenaovalor(endereo)0xA0

Nesteexemplo,oendereodavarivelvar1
Endereo(byte)
Valor
Nome
Varivel

0xA0

0xA7

00000010

0xA0

var1

ptr_var1

ProgCPonteiros

Ponteiros

Dizsequeptr_var1apontaparavar1
Ponteirotambmchamadodevarivelde
endereo
Endereo(byte)
Valor
Nome
Varivel

0xA0

0xA7

00000010

0xA0

var1

ptr_var1

ProgCPonteiros

AplicaesdePonteiros

Fazendoumaanalogiacomendereosfsicos

Oendereopraticamentedemesmotamanho

ProgCPonteiros

03

.d

as

L
e

t ra

s,

9
7
s,
ra
et

as
L
R
.d

et

R
.d

as

as

et

ra

s,

ra
s,
4

Ascasasemcadaendereopodemter
tamanhosdiferentes

R
.d

10

Aplicaesdeponteiros

Observeoexemploseguinte
Executando,verificasequetamanhodos
ponteirossempreomesmo
Paraplataforma32bits,de4bytes
printf("tamanhodechar:%d\n",sizeof(char));
printf("tamanhodoptrparachar:%d\n",sizeof(char*));
printf("tamanhodeint:%d\n",sizeof(int));
printf("tamanhodoptrparaint:%d\n",sizeof(int*));
ProgCPonteiros

11

AplicaesdePonteiros

Voltandoanalogiadacasa/endereo
Umaaplicaoacessarestruturasdedados
(casa)atravsdeponteiros(endereo)
Mesmoparaestruturascomplexas,oacesso
serrpido

ProgCPonteiros

12

AplicaesdePonteiros

Outraaplicaoretornarmaisdeumvalorde
umafunoatravsdeponteiros
Lembrarquenoformatoconvencional
tipo_retornonome_funcao(parametr1,parametr2)

floatmedia(floatnota1,floatnota2)

Sumvalorpodeserretornado

ProgCPonteiros

13

Declaraodeponteiros

Colocarumasterisconafrentedonomeda
varivel
intvar1;//declaraumavariveldotipoint
int*ptr_num;//declaraumponteirodotipoint

Cuidadocomdeclaraodemaisdeum
ponteironamesmalinha
intp,q,r;//trsvariveiscomuns
int*p,q,r;//cuidado!apenaspserum
ponteiro!
int*p,*q,*r;//agoratemostrsponteiros
ProgCPonteiros

14

OperadoresparaPonteiros
Operador Significado
Dereference(dadoumponteiro,obtmoelemento
*
referenciado)
&

Address_of(dadoumelemento,apontaparaomesmo)

ProgCPonteiros

15

OperadoresparaPonteiros
intvar1;//declaravariveldotipointcomonomevar1
var1=4;
int*ptr_var1;//declaraumponteirodotipoint
ptr_var1=&var1;//ponteiroapontaparavar1,ouseja,
armazenaoendereodevar1
*ptr_var1=5;//alteraovalorqueestarmazenadono
endereoapontadopeloponteiropara5

CdigoC Descrio
var1

Varivelsimples

&var1

Ponteiroparaavarivelvar1(endereodevar1)
Ponteiroparauminteiro(nesteexemplo,apontaparaa
ptr_var1 varivelvar1)
*ptr_var1 Uminteiro
ProgCPonteiros

16

OperaescomPonteiros

ProgCPonteiros

17

OperaescomPonteiros
#include<stdio.h>
intmain(){
inti=10;
int*ptr;
ptr=&i;
printf("Valordei:%d\n",i);
printf("Valorapontadoporptr:%d\n",*ptr);
printf("Endereodei:%p\n",&i);
printf("Endereoapontadoporptr:%p\n",ptr);
printf("Endereodeptr:%p\n",&ptr);

*ptr=5;
printf("Valordei:%d\n",i);
printf("Valorapontadoporptr:%d\n",*ptr);
printf("Endereoapontadoporptr:%p\n",ptr);
return(0);
ProgCPonteiros
18
}

Maisponteiros

Doisoumaisponteirospodemapontarparao
mesmoendereo

intval;
int*primeiro_ptr;/*umponteiro*/
int*segundo_ptr;/*maisumponteiro*/
val=1;/*atribuiumvalorparaavarivel*/
primeiro_ptr=&val;//Oqueestsendofeitoaqui?Comente
segundo_ptr=primeiro_ptr;//Eaqui?vlidofazerisso?
ProgCPonteiros

19

Exerccio1

Determineoqueocorreemcadalinhado
programa

Qualovalorfinaldeced?

int*a,*b,c=3,d=7;
a=&c;
b=&d;
*a=5;
*b=8;
*a=*b;
*a=2;
b=a;
*b=0;
ProgCPonteiros

20

RespostadoExerccio1
int*a,*b,c=3,d=7;
a=&c;//aapontarparac
b=&d;//bapontarparad
*a=5;//ovaloremcalterado(c=5)
*b=8;//ovalornavariveldalterado(d=8)
*a=*b;//ovalorded(apontadoporb)
//copiadoparac(apontadopora)(c=8)
*a=2;//ovalornavarivelcalterado(c=2)
b=a;//bapontaparaomesmolugarquea,
//ouseja,parac
*b=0;//ovalordecalterado(c=0)

ProgCPonteiros

21

Exerccio2

Determineoqueocorreemcadalinhado
programa

Qualovalorfinaldeaed?

inta=5,*b,*c,d=8;
b=&a;
a=7;
c=&a;
*c=9;
b=&d;
*b=*c;
*c=*b+*b;
d=a;
*b=1;
ProgCPonteiros

22

Inicializaodeponteiros

Ponteirosdevemserinicializadosantesde
seremusados,ouseja,tmqueapontarpara
umendereoespecficoantesdouso

Chamadowildpointer(ponteiroselvagem)

Fazeroseguintelevaraumafalhade
segmentao
int*p;/*ponteironoinicializado*/
*p=9;/*oendereofsicoparaguardaro
nmero9podenoservlido*/

ProgCPonteiros

23

Inicializaodeponteiros

Compileeexecuteoprogramaseguinte

Observeoproblema

ProgCPonteiros

24

Inicializaodeponteiros
#include<stdio.h>
intmain()
{
intval=7;
int*ptr;
printf("Valordeval:%d\n",val);
printf("Endereoapontadoporptr:%p\n",ptr);
printf("Valorapontadoporptr:%d\n",*ptr);
/*observequeaquihaverlixo,quepoderia
serusadoetrariaconsequnciasdesastrosas*/

return(0);
}
ProgCPonteiros

25

Inicializaodeponteiros
#include<stdio.h>
intmain()
{
intval=7;
int*ptr=NULL;/*apontarparaoendereoNULL
(0),irevitarquelixosejausado,comono
exemploanterior*/
printf("Valordeval:%d\n",val);
printf("Endereoapontadoporptr:%p\n",ptr);
printf("Valorapontadoporptr:%d\n",*ptr);
/*irgerarumSEGFAULT(falhade
segmentao)*/

return(0);
}
ProgCPonteiros

26

Inicializaodeponteiros
/*Maisumexemplodeproblema*/
#include<stdio.h>
intmain()
{
intval=7;
int*ptr;
*ptr=5;//aquiocorrerumafalhade
segmentao(SEGFAULT)

printf("Valordeval:%d\n",val);
printf("Valorapontadoporptr:%d\n",*ptr);
printf("Endereoapontadoporptr:%p\n",ptr);
return(0);
}
ProgCPonteiros

27

Resumoataqui

Ataqui,vimosoquesoponteirosecomo
operlos
Vamosver,agora,umaaplicaoimportante

Funescommaisdeumretornoatravsdouso
deponteiros

ProgCPonteiros

28

Ponteiroscomoargumentosde
funes

EmC,parmetrossopassadosparauma
funoatravsdeumachamadaporvalor
Valordoargumentocopiadoparadentroda
funo

ProgCPonteiros

29

Ponteiroscomoargumentosde
funes

Nachamadaporvalorocaminhostemuma
direo

ProgCPonteiros

30

Ponteiroscomoargumentosde
funes

Masusandoponteiros,possvelalteraro
prprioparmetrodeentrada
Assim,funopoderemularaexistnciade
maisdeumretorno

Passagemporreferncia

Vamosverumexemploprtico
ProgCPonteiros

31

Ponteiroscomoargumentosde
funes

Programaparatrocarovalordeduasvariveis
#include<stdio.h>
intmain()
{
inta=5;
intb=10;
inttemp;
printf("%d%d\n",a,b);

temp=a;
a=b;
b=temp;

printf("%d%d\n",a,b);
return0;
ProgCPonteiros
}

32

Ponteiroscomoargumentosde
funes

Eseessaoperaotiverqueserrepetida
vriasvezes?Comocoloclaemumafuno?
Verifiqueseocdigoseguintefariaisso.

ProgCPonteiros

33

#include<stdio.h>
voidswap(inti,intj)
{
inttemp;
temp=i;
i=j;
j=temp;
}
intmain()
{
inta,b;
a=5;
b=10;
printf("%d%d\n",a,b);
swap(a,b);
printf("%d%d\n",a,b);
return0;
}
ProgCPonteiros

34

Ponteiroscomoargumentosde
funes

Comofazerusandoponteiros

#include<stdio.h>
voidswap(int*i,int*j){
inttemp;
temp=*i;
*i=*j;
*j=temp;
}
intmain(){
inta,b;
a=5;
b=10;
printf("\n\nValema=%d,b=%d\n",a,b);
swap(&a,&b);
printf("\n\nAgora,valema=%d,b=%d\n",a,b);
return0;
ProgCPonteiros
}

35

Ponteiroscomoargumentosde
funes

Outroexemplo
//contadorincrementadodentrodafuno
#include<stdio.h>
voidinc_contador(int*conta_ptr)
{
(*conta_ptr)++;
}
intmain()
{
intconta=0;
while(conta<10)
inc_contador(&conta);
printf(conta=%d\n,conta);
return(0);
ProgCPonteiros
}

36

Ponteiroscomoargumentosde
funes
#include<stdio.h>
voidinc_contador
(int*conta_ptr)
{
(*conta_ptr)++;
}
intmain()
{
intconta=0;
while(conta<10)
inc_contador(&conta);
return(0);
}
ProgCPonteiros

37

Exerccio

Fazerumafunoquerecebaoraiodeum
crculoedevolvaocomprimentoda
circunfernciaearea

Nousevariveisglobais

Useponteiros

main()perguntaoraioparaousurio,chamaa
funoedepoisimprimeoresultado

ProgCPonteiros

38

Ponteiroscomoargumentosde
funes

Almdepermitirquemaisdeumvalorretorne,
apassagemporrefernciatemoutravantagem

Nohcpiadosvaloresparadentrodafuno

Maisrpidoeeficiente

Principalmenteparamanipulaodevetoreseestruturas

Observeoexemploseguinte

interessantemonitoraramemria(nodebugger)

ProgCPonteiros

39

Ponteiroscomoargumentosde
funes
#include<stdio.h>
voidtroca(char*string_ptr){
//frasenocopiadaparadentrodafuno.
passadoumponteiro(endereodoinciodastring).
*string_ptr='0';//alteraaprimeiraletra
string_ptr++;
*string_ptr='1';//alteraasegundaletra
}
intmain(){
charfrase[150]="Estaumastringgrande...";
printf("\n\nfrase=%s\n",frase);
troca(frase);
printf("\n\nAgora,frase=%s\n",frase);
return0;
ProgCPonteiros
}

40

AritmticadePonteiros

Adefiniodotipoemponteirosservepara

queocompiladorsaibaquantosbytescopiarpara
umaposiodememria

int*ptr,var1;//plataformacomint32
ptr=&var1;
*ptr=2;

Nesteexemplo,indicaque32bitsrepresentandoo
nmero2serocopiadosparaareadememria
apontada

Almdisso,tambmserveparafazeroperaes
ProgCPonteiros
aritmticascomponteiros

41

AritmticadePonteiros

Vamosimaginarqueptrdoexemploanterior
apontaparaoendereo(embytes)100
(decimal)
Paraqualendereoaponta(ptr+1)?

ProgCPonteiros

42

AritmticadePonteiros

Septrdotipoint(4bytes),oponteiroir
apontarparaoprximoendereocomum
inteiro
Nestecasohipottico,paraoendereo104

ProgCPonteiros

43

AritmticadePonteiros

Osoperadores

++,

comparao:>,<,>=,<=,==,!=

Sovlidoscomponteiroseoperamsobreos
endereos

Vejaexemploseguinte

ProgCPonteiros

44

AritmticadePonteiros
#include<stdio.h>
intmain(void){
intk=2010;
int*ptr=&k;
printf("0.tamanhodoint:%d\n",sizeof(int));
printf("0.endereodek:%p\n",&k);
printf("0.endereoapontadoporptr:%p\n",ptr);
ptr++;//parafinsdidticos.Nodeveseracessado
printf("1.endereoapontadoporptr:%p\n",ptr);
ptr++;
printf("2.endereoapontadoporptr:%p\n",ptr);
if(ptr>&k){
printf("endereo%pmaiorque%p\n",ptr,&k);
}
return0;
}
ProgCPonteiros

45

PonteiroseVetores(Arrays)

Podemoscontinuarestudandoaaritmticade
ponteirosapartirdevetores
EmC,oselementosdeumvetorso
guardadossequencialmente,aumadistncia
fixaumdooutro
Sejaoseguinte(pont_vet1.c)
chararray[5]={5,10,15,20,25};
char*array_ptr=&array[0];

ProgCPonteiros

46

PonteiroseVetores(Arrays)

Considerandoaorganizaohipotticade
chararray[5]={5,10,15,20,25};
memriadafigura char*array_ptr=&array[0];

Verifiqueoqueobtidocom

printf(%d%d,*array_ptr,*(array_ptr+1));

Ecomprintf(%d,(*array_ptr)+1);?

ProgCPonteiros

47

PonteiroseVetores(Arrays)

ProgramaExemplo

Definirvetor

Usarponteiroparaacessarcadavalor

(Noprximoexemplo,servistaaequivalncia
comvetor)

ProgCPonteiros

48

PonteiroseVetores(Arrays)

Verifiqueasadadoprograma(pont_vetor2.c)

#include<stdio.h>
intmain()
{
inti;
intvetor[3]={4,7,1};
int*ptr;
ptr=vetor;//EmCigualaptr=&vetor[0]
printf("Tam.dointnessaplataf.:%d\n\n",sizeof(int));
printf("End.vetor:%p\n",vetor);
printf("End.apontadoporptr:%p\n",ptr);
printf("End.ondeestptr:%p\n",&ptr);
for(i=0;i<3;i++){
printf("Oendereodondice%ddovetor%p\n",i,
&ptr[i]);
printf("Ovalordondice%ddovetor%d\n",i,
ptr[i]);
}
return0;
ProgCPonteiros
}

49

PonteiroseVetores(Arrays)

Ctrataponteirosevetoresdamesmaforma

Assim,soequivalentes(programaanterior)
vetor[i];//acessopadrovetor
ptr[i];
*(vetor+i);//acessopadroponteiro
*(ptr+i);

Testecadaumdeleseconfiraaequivalncia!
printf("Ovalordondice%ddovetor%d\n",i,vetor[i]);
...
printf("Ovalordondice%ddovetor%d\n",i,*(ptr+i));
ProgCPonteiros

50

PonteiroseVetores(Arrays)

Oprogramaseguinteverificaquantoselementos
estonovetorantesqueapareaum0

Nousaponteirosdeformaexplcita

#include<stdio.h>
intarray[]={4,5,8,9,8,1,0,1,9,3};
intindice;
intmain()
{
indice=0;
while(array[indice]!=0){
++indice;
}
printf("Numerodeelementosantesdezero%d\n",indice);
return(0);
}
ProgCPonteiros
51

PonteiroseVetores(Arrays)

Eesteoequivalente,usandoponteiros

Verifiquecomofunciona
#include<stdio.h>
intarray[]={4,5,8,9,8,1,0,1,9,3};
int*array_ptr;
intmain()
{
array_ptr=array;
while((*array_ptr)!=0){
++array_ptr;
}
printf("Numerodeelementosantesdozero%d\n",array_ptr
array);
return(0);
ProgCPonteiros
52
}

ExemplodeUsodePonteiros

SuponhaqueumnomeestejanaformaSilva/
Maria
Desejaseseparloemduaspartes
(sobrenomeenome)

ProgCPonteiros

53

ExemplodeUsodePonteiros

Comoabarraoseparador,temosque
procurladentrodastringdeentrada

while(*string_ptr!=caracter_procurar){

Dentrodolao,verificarseastringacaboue
noencontramosabarra,

if(*string_ptr=='\0')
return(NULL);
++string_ptr;
}
return(string_ptr);//aquiestaraposiodo
caracterprocurado
ProgCPonteiros

54

ExemplodeUsodePonteiros

Depoisdedescobriraposiodabarra,falta
separarasstrings

ProgCPonteiros

55

ExemplodeUsodePonteiros

Funoestnoarquivosplit_nome.c
Afunostrchrdabibliotecapadrostring.h
fazisso,masaquifoiusadaumaverso
prpriaparafinsdidticos

ProgCPonteiros

56

CuidadosnoUsodePonteiros

EmC,fcilescrevercdigoquesejadifcilde
entender
Issodeveserevitado
Nemsempreterumcdigocompactoa
melhorsoluo
Legibilidadedeveserprioritria

ProgCPonteiros

57

CuidadosnoUsodePonteiros

Noescrevaprogramasassim(preced1.c)
#include<stdio.h>
intarray[10]={1,2,3,4,5,6,7,8,9,10};
intmain(){
int*data_ptr;
intvalor;
data_ptr=&array[0];
printf("0.data_ptraponta=%p\n",data_ptr);
valor=*data_ptr++;
printf("1.valor=%d\n",valor);
printf("1.data_ptraponta=%p\n",data_ptr);
valor=*++data_ptr;
printf("2.valor=%d\n",valor);
printf("2.data_ptraponta=%p\n",data_ptr);
valor=++*data_ptr;
printf("3.valor=%d\n",valor);
printf("3.data_ptraponta=%p\n",data_ptr);
return(0);
}
ProgCPonteiros

58

CuidadosnoUsodePonteiros

ProgCPonteiros

59

CuidadosnoUsodePonteiros

Oresultadodependedaprecednciados
operadores

Paraficarmaisclaro,usarparnteses

Parntesestmprecednciamaior

Masverificarosprogramas

preced1ponteiros.c

preced2ponteiros.c
ProgCPonteiros

60

Cuidadoscomponteiros

Wildpointer:ponteironoinicializado

apontaparaendereopossivelmenteinvlido

jvimosexemplos

Danglingpointer:apontaparamemria
desalocada

Umdosbugsmaiscomplicadosdeencontrar

Porque,emumprimeiromomento,ocomportamento
podeserok

Maisem
http://en.wikipedia.org/wiki/Dangling_pointer
ProgCPonteiros

61

Cuidadoscomponteiros
#include<stdio.h>
int*funcao(void){
intnum=1234;
printf("Oendereodenum:%p\n",&num);
printf("Ovalordenum:%d\n",num);
return&num;
}
intmain(void){
int*ptr;
ptr=funcao();
printf("Oendereoapontadoporptr:%p\n",ptr);
printf("Ovalorapontadoporptr:%d\n",*ptr);//
aquijviroulixo,porquenumestforadeescopo
return(0);
}
ProgCPonteiros

62

Cuidadoscomponteiros
#include<stdio.h>
intmain(void){
int*ptr;
{
intnum=21;//escopodenumdentrodestebloco
ptr=&num;
printf("Oendereoapontadoporptr:%p\n",ptr);
printf("Ovalorapontadoporptr:%d\n",*ptr);
}
//numsaiudeescopo
printf("Oendereoapontadoporptr:%p\n",ptr);
printf("Ovalorapontadoporptr:%d\n",*ptr);//
emborapossamostrarumnum.aindavlido,um
problemaempotencial
return(0);
}
ProgCPonteiros

63

Cuidadoscomponteiros
#include<stdio.h>
intmain(void){
charfrase[6]="12345";
char*ptr=frase;
printf("caractere[0]=%c\n",*ptr);
ptr++;
printf("caractere[1]=%c\n",*ptr);
ptr+=3;
*ptr='A';
printf("caractere[4]=%c\n",*ptr);
ptr++;
printf("caractere[5]=%x\n",*ptr);//finaldastring(\0)
ptr++;//saiuda"frase"
*ptr='F';//estacessandoendereoforadastring
printf("caracterefora=%c\n",*ptr);
printf("frase=%s\n",frase);
return0;
ProgCPonteiros
64
}

SADADODEBUGGER(gdb)
Breakpoint1,main()atponteiroforaescopo3.c:3
3charfrase[6]="12345";
4char*ptr=frase;
6printf("caractere[0]=%c\n",*ptr);
(gdb)print&frase
$1=(char(*)[6])0xbf99964a
(gdb)x/8cb0xbf99964a
0xbf99964a:49'1'50'2'51'3'52'4'53
'5'0'\0'74'J'106'\226'
7ptr++;
8printf("caractere[1]=%c\n",*ptr);
9ptr+=3;
10*ptr='A';
11printf("caractere[4]=%c\n",*ptr);
12ptr++;

ProgCPonteiros

65

SADADODEBUGGER(gdb)(continuao)
13printf("caractere[5]=%x\n",*ptr);
(gdb)x/8cb0xbf99964a
0xbf99964a:49'1'50'2'51'3'52'4'65
'A'0'\0'79'O'106'\226'
14ptr++;//saiuda"frase"
15*ptr='F';//estacessandoendereoinvlido
16printf("caracterefora=%c\n",*ptr);
17printf("frase=%s\n",frase);
(gdb)x/8cb0xbf99964a
0xbf99964a:49'1'50'2'51'3'52'4'65
'A'0'\0'70'F'106'\226'
18return0;
19}

ProgCPonteiros

66

Cuidadoscomponteiros

Verdiscussoem
http://stackoverflow.com/questions/2583656/whatisthemeaningofwildpointerinc

ProgCPonteiros

67

Ponteirosconst

Oqueestdefinidocomoconstanteemcada
declarao?
constintresult=10;
constchar*resposta_ptr="Eletronica";
char*constnome_ptr="IFSC";
constchar*constteste_ptr="Florianopolis";

ProgCPonteiros

68

Ponteirosconst

Oqueestdefinidocomoconstanteemcada
declarao?
constintresult=10;//resultuminteiroeovalor
nopodeseralterado
constchar*resposta_ptr="Eletronica";//osdados
(char)soconstantes,masavarivelresposta_ptr,no.
//resposta_ptrumponteiroquepodeapontarparaoutro
endereo.
//osdadosapontadosporresposta_ptrsoconstantes.
char*constnome_ptr="IFSC";//nome_ptrumponteiro
queconstante.
//osdadosapontadospornome_ptrpodemsermudados.
constchar*constteste_ptr="Florianopolis";//aqui,
nemosdadosnemoponteiropodemseralterados.
ProgCPonteiros

69

BibliografiaeCrditodasFiguras

OUALLINE,S.PracticalCProgramming.3.ed.
O'Reilly,1997.
ARGOUD,F.I.M.IntroduoLinguagemC(notas
deaula).Florianpolis,2009.

http://home.netcom.com/~tjensen/ptr/pointers.htm

http://br.geocities.com/cesarakg/pointers.html

http://pt.wikibooks.org/wiki/Programar_em_C/Ponteiros

http://www.difranco.net/cop2220/opprec.htm
ProgCPonteiros

70

Você também pode gostar