Professional Documents
Culture Documents
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#
}
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=#
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