Você está na página 1de 22

LINGUAGEM

PROGRAMAO
PONTEIROS
Instituto Federal do Paran Ca!us Parana"u
Prof. Gil Eduardo de Andrade - Linguagem de Programao - Ponteiros 2
INTRO#UO $ PONTEIROS
#EFINIO%
Ponteiro uma varivel que contm um endereo
de memria, que normalmente a posio de uma
outra varivel na memria;
Sendo assim dizemos que esta varivel (ponteiro)
aponta para outra varivel, da o nome ponteiro;
Prof. Gil Eduardo de Andrade - Linguagem de Programao - Ponteiros 3
INTRO#UO $ PONTEIROS
MOTI&OS UTILI'AO%
ornecem meios pelos quais !un"es podem
modi!icar seus ar#umentos, aqueles passados a ela;
Permitem utilizao de alocao din$mica % onde
indicamos o taman&o de um vetor'matriz em tempo
de e(ecuo e no de codi!icao;
)umenta a e!ici*ncia de certas rotinas;
Prof. Gil Eduardo de Andrade - Linguagem de Programao - Ponteiros 4
ENTEN#EN#O PONTEIROS
#ECLARAO%
'' +eclarao de uma varivel ponteiro
tipo
tipo
(
(
nome
nome;
,nde o tipo qualquer um vlido em - e o nome
o nome da varivel ponteiro;
).ai(o al#uns e(emplos/
int 0vetor;
c&ar 0nome;
!loat 0pi;
Prof. Gil Eduardo de Andrade - Linguagem de Programao - Ponteiros 5
OPERA#ORES PONTEIROS
TIPO #O PONTEIRO%
, tipo .ase do ponteiro de!ine que tipo de variveis o
ponteiro pode apontar;
OPERA#ORES #E PONTEIROS%
1(istem dois operadores especiais para ponteiros/
(
2
2) devolve o endereo de memria;
(
0
0) devolve o valor da varivel; (q 3
0
0m;)
Prof. Gil Eduardo de Andrade - Linguagem de Programao - Ponteiros 6
E)EMPLO OPERA#ORES
OPERA#OR *%
m 3 2 2count; '' coloca em m o endereo de memria que
'' contm a varivel count
OPERA#OR (%
q 3 0 0m; '' coloca o valor de count (m) em q
Prof. Gil Eduardo de Andrade - Linguagem de Programao - Ponteiros 7
E)EMPLO OPERA#ORES
C+#IGO FONTE C%
4 include 5stdio6&7
void main()
8
int (, 9;
int 0p;
'' atri.ui valor :; a (
( 3 :;;
'' !az ponteiro p apontar para inteiro (
p 3 2(;
'' !az 9 rece.er o valor de ( (apontado por p)
9 3 0p;
'' imprime novo valor de 9
print!(<, valor de 9 3 =i>, 9);
?
Prof. Gil Eduardo de Andrade - Linguagem de Programao - Ponteiros 8
E)EMPLO OPERA#ORES
C+#IGO FONTE C%
4 include 5stdio6&7
void main()
8
int (;
int 0p;
'' atri.ui valor :; a (
( 3 :;;
'' !az ponteiro p apontar para inteiro (
p 3 2(;
'' imprime o conte@do de p e o valor do endereo que aponta
print!(<, conte@do de (p) 3 =p>, p);
print!(<, valor do endereo apontado por (p) 3 =i>, 0p);
?
Prof. Gil Eduardo de Andrade - Linguagem de Programao - Ponteiros
E)EMPLO OPERA#ORES
C+#IGO FONTE C%
4 include 5stdio6&7
void main()
8
int (, 9;
'' atri.ui valor :; a (
( 3 :;;
'' atri.u valor ;: a 9i
9 3 ;:;
'' imprime o conte@do de p e o valor do endereo que aponta
print!(<,s conte@dos ((, 9) 3 (=i, =i)>, (, 9);
print!(<,s endereos de memria (2(, 29) 3 (=p, =p)>, 2(, 29);
?
Prof. Gil Eduardo de Andrade - Linguagem de Programao - Ponteiros !"
ALOCAO #IN,MICA
INTRO#UO%
)locao din$mica o meio pelo qual um pro#rama
pode o.ter memria enquanto est em e(ecuo;
Aariveis locais e #lo.ais no podem ser
acrescentadas (em taman&o) durante o tempo de
e(ecuo;
Sendo assim nos momentos em que precisamos de
armazenamento de quantidades variveis utilizamos
ponteiros com alocao din$mica de memria;
Prof. Gil Eduardo de Andrade - Linguagem de Programao - Ponteiros !!
ALOCAO #IN,MICA
FUN-ES PRINCIPAIS%
) lin#ua#em - possui diversas !un"es de alocao
din$mica porm as duas principais so a !uno
malloc()
malloc() e a !uno
!ree()
!ree();

malloc()
malloc()/ aloca a quantidade de memria necessria;

!ree()
!ree()/ li.era a quantidade de memria alocada;
Prof. Gil Eduardo de Andrade - Linguagem de Programao - Ponteiros !2
ALOCAO #IN,MICA
FUNO MALLOC./%
'' Prottipo da !uno malloc
void 0malloc(sizeBt nmero_de_bytes);

void
void C indica que voc* pode atri.uir esta !uno a
qualquer tipo de ponteiros6

sizeBt %
sizeBt % tipo de!inido na .i.lioteca stdli.6&, como uma
espcie de inteiro sem sinal;

n@meroBdeB.9tes %
n@meroBdeB.9tes % total de .9tes de memria que se
quer alocar;
Prof. Gil Eduardo de Andrade - Linguagem de Programao - Ponteiros !3
UTILI'AO #O MALLOC
E)EMPLO UTILI'AO MALLOC%
int 0p;
p 3 malloc(DE0sizeo!(int));
)loca espao para DE inteiros, o uso do sizeo!(int)
asse#ura que ser alocado DE vezes o taman&o de um
tipo inteiro, visto que cada tipo possui um taman&o
espec!ico, por e(emplo um tipo double utiliza um espao
de memria maior que um tipo inteiro;
Prof. Gil Eduardo de Andrade - Linguagem de Programao - Ponteiros !4
E)EMPLO ALOCAO
C+#IGO FONTE C%
4 include 5stdio6&7
4 include 5stdli.6&7
void main()
8
int (;
int taman&o 3 ;E;
int 0p;
'' aloca dinamicamente ponteiro de inteiros com ;E posi"es
p 3 malloc(taman&o0sizeo!(int));
'' !az ponteiro p rece.er valores nas posi"es alocadas e imprime
!or((3E; (5taman&o; (FF) 8
pG(H 3 (;
print!(<Aalor pG=iH 3 =i>, (, pG(H);
?
?
Prof. Gil Eduardo de Andrade - Linguagem de Programao - Ponteiros !5
E)EMPLO ALOCAO
C+#IGO FONTE C%
4 include 5stdio6&7
4 include 5stdli.6&7
void main()
8
int (;
int taman&o 3 ;D;
c&ar 0p;
'' aloca dinamicamente ponteiro de caracteres com ;D posi"es
p 3 malloc(taman&o0sizeo!(c&ar));
'' !az ponteiro p rece.er caracteres nas posi"es alocadas e imprime
!or((3E; (5taman&o; (FF) 8
pG(H 3 ( F ID;
print!(<Aalor pG=iH 3 =c>, (, pG(H);
?
?
Prof. Gil Eduardo de Andrade - Linguagem de Programao - Ponteiros !6
A 0I0LIOTECA 1strin"234
INTRO#UO%
) .i.lioteca 5strin#6&7 5strin#6&7 permite manipularmos strin#s
(conJuntos) de caracteres, de !orma a e!etuarmos
comparao, concatenao (Juntar), o.termos o taman&o
entes outras !un"es;
PRINCIPAIS FUN-ES%
strcmp(c&ar 0a, c&ar 0.)/ strcmp(c&ar 0a, c&ar 0.)/ compara a e .;
strlen(c&ar 0a)/ strlen(c&ar 0a)/ retorna o tamn&o de a;
strcp9(c&ar 0a, c&ar 0.)/ strcp9(c&ar 0a, c&ar 0.)/ copia . para a;
strcat(c&ar 0a, c&ar 0.)/ strcat(c&ar 0a, c&ar 0.)/ concatena a e .;
Prof. Gil Eduardo de Andrade - Linguagem de Programao - Ponteiros !7
A 0I0LIOTECA 1strin"234
E)EMPLO UTILI'AO%

strcmp(c&ar 0a, c&ar 0.)/
strcmp(c&ar 0a, c&ar 0.)/
c&ar 0pn 3 8K#il eduardoK?;
c&ar 0sn 3 8KandradeK?;
int comparacao 3 strcmp(pn, sn);

strlen(c&ar 0a)/
strlen(c&ar 0a)/
c&ar 0nome 3 8<)stronildo>?;
int taman&o 3 strlen(nome);
!ara 5o!ara5ao%
67 % pn e sn so i#uais
47 % pn maior que sn
17 % pn menor que sn
Prof. Gil Eduardo de Andrade - Linguagem de Programao - Ponteiros !8
A 0I0LIOTECA 1strin"234
E)EMPLO UTILI'AO%

strcp9(c&ar 0destino, c&ar 0ori#em)/
strcp9(c&ar 0destino, c&ar 0ori#em)/
c&ar 0ori#em, 0destino 3 8K#il eduardoK?;
int total 3 strlen(destino);
ori#em 3 malloc(total0sizeo!(c&ar));
strcp9 (Junto, pn);

strcat(c&ar 0a, c&ar 0.)/
strcat(c&ar 0a, c&ar 0.)/
c&ar 0Junto, 0pn 3 8K#il eduardoK?, 0sn 3 8KandradeK?;
Junto 3 malloc(total0sizeo!(c&ar));
strcp9 (Junto, pn);
strcat(Junto, sn);
Prof. Gil Eduardo de Andrade - Linguagem de Programao - Ponteiros !
A 0I0LIOTECA 1strin"234
C+#IGO FONTE C%
4include 5stdio6&7
4include 5stdli.6&7
4include 5strin#6&7
void main()
8
int taman&oBpn, taman&oBsn;
c&ar 0pn 3 8K#il eduardoK?;
c&ar 0sn 3 8KandradeK?;
'' taman&oBpn rece.e o taman&o da strin# pn
taman&oBpn 3 strlen(pn);
'' taman&oBsn rece.e o taman&o da strin# sn
taman&oBsn 3 strlen(sn);
'' Lmprime os valores dos taman&os de pn e sn
print!(KMnNaman&o da strin# pn(=s) 3 =iK, pn, taman&oBpn);
print!(KMnNaman&o da strin# sn(=s) 3 =iK, sn, taman&oBsn);
?
Prof. Gil Eduardo de Andrade - Linguagem de Programao - Ponteiros 2"
A 0I0LIOTECA 1strin"234
C+#IGO FONTE C%
4include 5stdio6&7
4include 5stdli.6&7
4include 5strin#6&7
void main()
8
int comparacao;
c&ar 0pn 3 8K#il eduardoK?;
c&ar 0sn 3 8KandradeK?;
'' compara as strin#s pn, sn e #uarda valor em comparacao
comparacao 3 strcmp(pn, sn);
'' veri!ica resultado da !uno strcmp(pn, sn) #uardado em comparacao
i!(comparacao 33 E) print!(K=s 3 =sK, pn, sn); '' E pn e sn so i#uais
i!(comparacao 33 :) print!(K=s 7 =sK, pn, sn); '' : pn maior que sn
i!(comparacao 33 C:) print!(K=s 5 =sK, pn, sn); '' C: pn menor que sn
?
Prof. Gil Eduardo de Andrade - Linguagem de Programao - Ponteiros 2!
A 0I0LIOTECA 1strin"234
C+#IGO FONTE C%
4include 5stdio6&7
4include 5stdli.6&7
4include 5strin#6&7
void main()
8
c&ar 0pn 3 8K#il eduardoK?;
c&ar 0copia;
int taman&o 3 strlen(pn);
'' copia o conte@do de pn para dentro de copia
strcp9(copia, pn);
'' imprime o conte@do de copia
print!(K, conte@do de (copia) 3 =sK, copia);
?
Prof. Gil Eduardo de Andrade - Linguagem de Programao - Ponteiros 22
A 0I0LIOTECA 1strin"234
C+#IGO FONTE C%
4include 5stdio6&7
4include 5stdli.6&7
4include 5strin#6&7
void main()
8
int total;
c&ar 0Junto, 0pn 3 8K#il eduardoK?, 0sn 3 8KandradeK?;
'' total rece.e o taman&o da strin# pn F o taman&o da strin# sn
total 3 strlen(pn) F strlen(sn);
'' aloca dinamicamente ponteiro de caracteres com (total) posi"es
Junto 3 malloc(total0sizeo!(c&ar));
'' Junto rece.e uma cpia de pn
strcp9(Junto, pn);
'' Junto rece.e a concateno (Juno) de seu conte@do e sn
strcat(Junto, sn);
'' imprime o nome completo
print!(KOome -ompleto/ =sK, Junto);
?

Você também pode gostar