Você está na página 1de 17

Linguagem de Programao C/C++ 19/10/15

Advertisement S iga-no s no T wit t er


FEED RS S - O que isso ?
Adicio ne ao s Favo rit o s

Buscar
BLOG FRUM SIT EMAP QUEM SOMOS CONT AT O

Pro gramao TI Expert Pro grama o C/C++ Enquete


Algo ritmo O Go o gle C hro me OS
C/C++ ir desbancar o
C/C++
Micro so f t Windo ws 7?
Java Linguagem de pro grama o c riada na dc ada de 70. Ainda s itua-s e c o mo uma das linguagens de
s im
pro grama o mais largamente utiliz ada no mundo .
Web no
T uto rial co mpleto + No vidades
HTML/XHTML
Po nteiro s Nulo s e Vaz io s parciais vo t ar
JavaScript Intro du o - C
Intro du o C++ (Null Po inters e Vo id Po inters )
PHP O que Nec es s rio para Pro gramar em C o u C++ Po nteiro s para Po nteiro s
Primeiro Pro grama em C Po nteiro Co mo Argumento
Sistema Operacio nal de Fun o
Analis ando o Primeiro Pro grama em C
Co mando s de DOS Inc lude e as Biblio tec as Po nteiro de Veto r
Dec lara o de Variveis Po nteiro s de Struc t
Windo ws
Pro c es s o s e Atribui o de Valo r a Variveis
Linux Fun es de Sada em C
Tudo So bre Ms c aras de Dado s + Os mais lido s
Mac/BSD
Fun es de Sada em C++ Switc h, Cas e e Default
Office Fun es de Entrada em C Es trutura de Repeti o - FOR
Fun es de Entrada em C++ Es trutura Seletiva - IF e
Wo rd / Writer Us ando Co mando s de Sis tema MS-DOS ELSE
Excel / Calc Es trutura Seletiva - IF e ELSE Es trutura de Repeti o -
Operado res L gic o s WHILE
reas do Site Es trutura de Repeti o - FOR Biblio tec a Matemtic a
Es trutura de Repeti o - WHILE (Math.h)
Do wnlo ad
Es trutura de Repeti o - DO WHILE
F rum Fun es
Fun es (c o m argumento s )
Blo g Variveis Lo c ais e Glo bais
Pro t tipo s de Fun es
Parc erias Rec urs ividade
Fun es Inline
Reco mendamo s
Co mando s BREAK e CONTINUE
Switc h, Cas e e Default
Anncio s Go o gle Labels e GOTO
Trabalhando c o m Carac teres , a biblio tec a CTYPE
C++ tutorial Veto res Unidimens io nais
String
Programa c++ #define (Definir c o ns tantes )
Typec as t (Co nvers o de Tipo s de Dado s )
C c++ Biblio tec a Matemtic a (Math.h)
Es trutura de Dado s - STRUCT
Typedef - Defini o de No mes de Tipo s
Po nteiro s , refernc ia e derefernc ia
Po nteiro s de Struc t
Po nteiro de Veto r
Po nteiro Co mo Argumento de Fun o
Po nteiro s para Po nteiro s
Po nteiro s Nulo s e Vaz io s (Null Po inters e Vo id Po inters )

Programao Algortmo | C/C++ | Java Quem Somos

Web HTML/XHTML | JavaScript | PHP Contato

Sist ema Operacional Comandos de DOS | Windows | Linux | Mac/BSD Termos de Uso

Office Word/Wirter | Excel/Calc WWW.TIEXPERT.NET 2007 - 2010

reas do Sit e Downloads | Frum | Blog

http://www.tiexpert.net/programacao/c/index.php 1 / 17
C/C++ - Estrutura de Dados - STRUCT 19/10/15

MEST RADO E DOUT ORADO S iga-no s no T wit t er


INT ERNACIONAL
inscri es abertas - INICIO JANEIRO FEED RS S - O que isso ?
INSCRIBA-SE
2016
Adicio ne ao s Favo rit o s

Buscar
BLOG FRUM SIT EMAP QUEM SOMOS CONT AT O

Pro gramao TI Expert Pro grama o C/C++ Es trutura de Dado s - STRUCT Enquete
Algo ritmo Estrutura de Dados - ST RUCT O Go o gle C hro me OS
ir desbancar o
C/C++
O c o nc eito de o rienta o a o bjeto - princ ipalmente c las s es que s ero tratadas mais a frente - Micro so f t Windo ws 7?
Java tem uma bas e muito s lida no c o nc eito de es trutura de dado s . s im
Web As es truturas de dado s c o ns is tem em c riar apenas um dado que c o ntm vrio s membro s , que
no
nada mais s o do que o utras variveis . De uma fo rma mais s imples , c o mo s e uma varivel
HTML/XHTML tives s e o utras variveis dentro dela. A vantagem em s e us ar es truturas de dado s que po demo s parciais vo t ar
JavaScript agrupar de fo rma o rganiz ada vrio s tipo s de dado s diferentes , po r exemplo , dentro de uma
es trutura de dado s po demo s ter junto s tanto um tipo flo at, um inteiro , um c har o u um do uble.
PHP
As variveis que fic am dentro da es trutura de dado s s o c hamadas de membro s .
Sistema Operacio nal
Criando uma estrutura de dado s co m ST RUCT
Co mando s de DOS
Para c riar uma es trutura de dado s us amo s a palavra res ervada s truc t. To da es trutura deve s er
Windo ws c riada antes de qualquer fun o o u mes mo da fun o princ ipal main. To da es trutura tem no me e
s eus membro s s o dec larado s dentro de um blo c o de dado s . Ap s a defini o de s eus membro s
Linux
no blo c o de dado s , terminamo s a linha c o m um po nto -e-vrgula (;). Po rtanto :
Mac/BSD
1. struct nome_da_estrutura { tipo_de_dado nome_do_membro; };
Office
Wo rd / Writer Po r exemplo , s e fo s s emo s c riar uma es trutura de dado s para s imbo lar uma data faramo s :

Excel / Calc 1. struct data {


2. int dia;
reas do Site 3. int mes;
Do wnlo ad 4. int ano;
5. };
F rum
Blo g Declarando um struct e acessando seus membro s
Ainda utiliz ando o exemplo ac ima, vamo s dec larar uma varivel do tipo es trututa de dado s data e
Parc erias ac es s ar s eus membro s .
Reco mendamo s Ap s c riarmo s uma es trutura de dado s c o m s truc t, po deremo s utiliz -la c o mo um tipo de dado
c o mum (ex.: flo at, int, c har). E para ac es s ar s eus membro s utiliz amo s a varivel dec larada mais
um po nto (.) e o no me do membro . Veja es te exemplo abaixo :
Anncio s Go o gle
01. #include <iostream>
C c++ c# 02. #include <cstdlib>
03. using namespace std;
Programa c++ 04.
05. struct data {
Struct c++ 06. int dia;
07. int mes;
08. int ano;
09. };
10.
11. int main (void){
12. data hoje;
13. hoje.dia = 23;
14. hoje.mes = 9;
15. hoje.ano = 2008;
16. cout <<"Hoje e "<<hoje.dia<<"/"<<hoje.mes<<"/"<<hoje.ano<<endl;
17. system ("pause");
18. return EXIT_SUCCESS;
19. }

Po rtanto , a varivel ho je dec larada c o mo s endo um tipo de dado data. Data uma es trutura de
dado s que tem trs c arac ters tic as (o u trs membro s ) inteiro s : dia, mes e ano . Co mo ho je um
tipo de dado data, ele o btm o s mes mo s trs membro s . Para ac es s ar c ada membro , us amo s a
varivel e depo is o no me do membro que queremo s ac es s ar s eparado s po r po nto (.).

Autor: Denys William Xavier


Este artigo est sob Licena Creative Commons.

Biblio tec a Matemtic a (Math.h) C /C ++ Typedef - Defini o de No mes de Tipo s

Go s to u? Es te artigo fo i
Indique no s s o s ite! lido 131687 vez es

Pginas Relacio nadas

C/C++ - Dec lara o de Variveis


C/C++ - Typedef - Defini o de No mes de Tipo s
C/C++ - Po nteiro s de Struc t
C/C++ - Tudo So bre Ms c aras de Dado s
C/C++ - Typec as t (Co nvers o de Tipo s de Dado s )
Java - Get e Set - Mto do s Ac es s o res
Java - Public , Private e Pro tec ted
Java - O que s o Atributo s e Variveis
Java - Tipo s de Dado s
Java - Enum

Programao Algortmo | C/C++ | Java Quem Somos

Web HTML/XHTML | JavaScript | PHP Contato

Sist ema Operacional Comandos de DOS | Windows | Linux | Mac/BSD Termos de Uso

Office Word/Wirter | Excel/Calc WWW.TIEXPERT.NET 2007 - 2010

http://www.tiexpert.net/programacao/c/struct.php 2 / 17
C/C++ - Estrutura de Dados - STRUCT 19/10/15
reas do Sit e Downloads | Frum | Blog

http://www.tiexpert.net/programacao/c/struct.php 3 / 17
C/C++ - Typedef - Denio de Nomes de Tipos 19/10/15

DESKT OPS PARA EMPRESAS S iga-no s no T wit t er


FEED RS S - O que isso ?
Inspiron Small (Intel). Desempenho Rpido c/ Intel Co
Adicio ne ao s Favo rit o s

Buscar
BLOG FRUM SIT EMAP QUEM SOMOS CONT AT O

Pro gramao TI Expert Pro grama o C/C++ Typedef - Defini o de No mes de Tipo s Enquete
Algo ritmo T ypedef O Go o gle C hro me OS
ir desbancar o
C/C++
Em C e C++ po demo s redefinir um tipo de dado dando -lhe um no vo no me. Micro so f t Windo ws 7?
Java s im
Es s a fo rma de pro grama o ajuda em do is s entido s : 1. Fic a mais s imples entender para que
Web s erve tal tipo de dado ; 2. a nic a fo rma de c o ns eguirmo s referenc iar uma es trutura de dado s
no
dentro de o utra (s truc t dentro de s truc t).
HTML/XHTML
Para redefinirmo s o no me de um tipo de dado us amo s o c o mando typedef, que pro vm de t ype parciais vo t ar
JavaScript def initio n.
PHP Typedef faz o c o mpilado r as s umir que o no vo no me um c erto tipo de dado , e ento , pas s amo s
a us ar o no vo no me da mes ma fo rma que us aramo s o antigo .
Sistema Operacio nal
Po r exemplo , po demo s definir que, ao invs de us armo s int, ago ra us aremo s inteiro o u, ao invs
Co mando s de DOS de us armo s flo at, us aremo s dec imal.
Windo ws Typedef deve s empre vir antes de qualquer pro grama o que envo lva pro c edimento s (pro t tipo
Linux de fun es , fun es , fun o main, s truc ts , etc .) e s ua s intas e bas e :

Mac/BSD typedef no me_antigo no me no vo ;


Des s a fo rma, s imples mente, definiramo s o exemplo ac ima c o mo :
Office
Wo rd / Writer 1. typedef int inteiro;
2. typedef float decimal;
Excel / Calc
reas do Site Se fo s s emo s utiliz ar es s as no vas defini es em um pro grama fic aria as s im:

Do wnlo ad 01. #include <iostream>


02. #include <cstdlib>
F rum 03. using namespace std;
Blo g 04.
05. typedef int inteiro;
Parc erias 06. typedef float decimal;
07.
Reco mendamo s 08. int main (){
09. inteiro x = 1;
10. decimal y = 1.5;
Anncio s Go o gle 11. cout << "X=" << x << "\nY=" << y << endl;
12. system ("pause");
Dev c++ 13. return EXIT_SUCCESS;
14. }
C c++
Nota importante: O us o de typedef para redefinir no mes de tipo s primitivo s (c o mo int, flo at,
Java c++ c har) altamente des enc o rajado po r pro po rc io nar uma meno r legibilidade do c digo . Po rtanto ,
devemo s utiliz ar typedef apenas em mo mento s o po rtuno s (c o mo po r exemplo , definir o no me de
uma es trutura de dado s c o mplexa - s truc t).
Definindo no mes para estruturas de dado s
Uma vantagem muito grande que typedef no s pro po rc io na definir um no me para no s s a
es trutura de dado s (s truc t).
Gra as a is s o , s o mo s c apaz es de auto -referenc iar a es trutura, o u s eja, c o lo c ar um tipo de dado
s truc t dentro de o utro s truc t.
Po demo s definir o no me de uma es trutura de dado s (s truc t) de duas maneiras :
Definindo o no me da es trutura e s depo is definir a es trutura; o u definir a es trutura ao mes mo
tempo que define o no me.
Da primeira fo rma s eria o mes mo que fiz s s emo s is s o :

1. typedef struct estrutura1 MinhaEstrutura;


2. struct estrutura1 {
3. int var1;
4. float var2;
5. };

Da s egunda fo rma s eria o mes mo que fiz s s emo s is s o :

1. typedef struct estrutura1 {


2. int var1;
3. float var2;
4. } MinhaEstrutura;

Ago ra, que j po s s umo s uma es trutura de dado s definida c o m um no me, n s po demo s utiliz -la
dentro de o utra es trutura de dado s . Po r exemplo :

01. typedef struct estrutura1 MinhaEstrutura;


02. struct estrutura1 {
03. int var1;
04. float var2;
05. };
06.
07. struct estrutura2 {
08. int var3;
09. MinhaEstrutura var4;
10. };

Co mo po demo s perc eber, s o mo s c apaz es de us ar MinhaEs trutura (que na verdade o s truc t


es trutura1) dentro do s truc t es trutura2 perfeitamente, s em maio res pro blemas . O que s eria
impo s s vel de s er feito s e dec lars s emo s dentro de es trutura2 o var4 c o mo s endo es trutura1.
Para demo ns trar c o m algo mais c o nc reto , abaixo es t um algo ritmo que o btm a data de
nas c imento de uma pes s o a.

01. #include <iostream>


02. #include <cstdlib>
03. #include <cstring>
04. using namespace std;
05.
06. typedef struct data {
07. unsigned short dia;
08. unsigned short mes;

http://www.tiexpert.net/programacao/c/typedef.php 4 / 17
C/C++ - Typedef - Denio de Nomes de Tipos 19/10/15
09. unsigned int ano;
10. } Data;
11.
12. typedef struct aniversario {
13. char nome[50];
14. Data nascimento;
15. } Aniversario;
16.
17. int main (){
18. Aniversario alguem;
19. cout << "Digite o nome de alguem" << endl;
20. cin.getline (alguem.nome, 50);
21. cout << "Digite o dia que esta pessoa nasceu" << endl;
22. cin >> alguem.nascimento.dia;
23. cout << "Digite o mes que esta pessoa nasceu" << endl;
24. cin >> alguem.nascimento.mes;
25. cout << "Digite o ano que esta pessoa nasceu" << endl;
26. cin >> alguem.nascimento.ano;
27. system ("cls");
28. cout << alguem.nome << endl;
29. cout << "nasceu em ";
30. cout << alguem.nascimento.dia<<"/";
31. cout << alguem.nascimento.mes<<"/";
32. cout << alguem.nascimento.ano<<endl;
33. system ("pause");
34. return EXIT_SUCCESS;
35. }
Fa a o Do wnlo ad des te C digo
No algo ritmo ac ima, o btemo s o no me da pes s o a dentro de uma s tring na s truc t anivers ario , e
dentro des ta es trutura tambm h o utra s truc t que define o s dado s c o ntido s em qualquer data
(dia, ms e ano ). Ento , dec laramo s uma varivel c hamada alguem do tipo aniversario (que na
verdade o struct aniversario). Pegamo s uma s tring e guardamo s dentro do membro no me. As
datas s o ac es s adas da mes ma fo rma, mas c o m um detalhe. Co mo alguem po s s ui o utro s truc t
dec larado dentro dele c o m o no me de nas c imento , devemo s primeiro ac es s ar a varivel
nas c imento para s depo is ac es s ar o membro de s ua es trutura. Es s e c o nc eito impo rtante
entender, po rque po dem exis tir muitas es truturas aninhadas e para ac es s ar um determinado tipo
de dado devemo s perc o rrer to da es trutura. c o mo s e es tivs s emo s entrando em vrias pas tas
diferentes at c hegar ao arquivo que queremo s e, ao invs , de s eparar c ada es trutura c o m uma
barra (c o mo ac o ntec e c o m as pas tas ), n s s eparamo s c ada es trutura c o m um po nto .

Autor: Denys William Xavier


Este artigo est sob Licena Creative Commons.

Es trutura de Dado s - STRUCT C /C ++ Po nteiro s , refernc ia e derefernc ia

Go s to u? Es te artigo fo i
Indique no s s o s ite! lido 87694 vez es

Pginas Relacio nadas


C/C++ - Es trutura de Dado s - STRUCT
C/C++ - Po nteiro s de Struc t
Java - Enum

Programao Algortmo | C/C++ | Java Quem Somos

Web HTML/XHTML | JavaScript | PHP Contato

Sist ema Operacional Comandos de DOS | Windows | Linux | Mac/BSD Termos de Uso

Office Word/Wirter | Excel/Calc WWW.TIEXPERT.NET 2007 - 2010

reas do Sit e Downloads | Frum | Blog

http://www.tiexpert.net/programacao/c/typedef.php 5 / 17
C/C++ - Ponteiros, referncia e dereferncia 19/10/15

S iga-no s no T wit t er
FEED RS S - O que isso ?
Adicio ne ao s Favo rit o s

Buscar
BLOG FRUM SIT EMAP QUEM SOMOS CONT AT O

Pro gramao TI Expert Pro grama o C/C++ Po nteiro s , refernc ia e derefernc ia Enquete
Algo ritmo Ponteiros O Go o gle C hro me OS
ir desbancar o
C/C++
Po nteiro s s o as mais po dero s as e tambm as mais c o ntro vers as ferramentas da linguagem C e Micro so f t Windo ws 7?
Java C++. s im
Web Po nteiro s fo ram abo lido s de linguagens no vas bas eadas em C, c o mo po r exemplo Java. Mas , um
no
pro grama que utiliz a po nteiro s s abiamente tem um des empenho muito maio r, po is po nteiro s
HTML/XHTML trabalham diretamente c o m a mem ria. Des s a fo rma, pratic amente, po demo s manipular to da a parciais vo t ar
JavaScript quantia de mem ria do c o mputado r, mes mo que s eja po uc a o u muita.

PHP Po nteiro s c o mo o pr prio no me diz , quem apo nta. Sua nic a fun o , mas de extrema
impo rtnc ia, guardar o endere o de mem ria de uma varivel.
Sistema Operacio nal Quando dec laramo s uma varivel e exec utamo s o pro grama, o s is tema o perac io nal s e enc arrega
Co mando s de DOS de alo c ar (res ervar) o es pa o nec es s rio para o tipo de dado e "marc a" aquele es pa o de
mem ria c o m um no me, que o no me da varivel. O papel do po nteiro guardar exatamente
Windo ws es te endere o .
Linux Co mo po nteiro s guardam endere o s de mem ria, po demo s guardar o endere o de qualquer
Mac/BSD parte da mem ria, mes mo que es te es pa o no tenha s ido res ervado no inc io da exec u o do
pro grama.
Office
Po demo s dec larar po nteiro s o u us ar referenc iamento e dereferenc iamento . Po nteiro s s o
Wo rd / Writer dec larado s c o mo s e fo s s em variveis , mas c o ntendo um indic ado r (que um as teris c o ).
Excel / Calc Po r exemplo , s e fo rmo s c riar do is po nteiro s , s endo um para um endere o de mem ria c o ntendo
um dado flo at e o utro c o ntendo um int, faramo s :
reas do Site
1. float *ponteiroFloat
Do wnlo ad
2. int *ponteiroInt
F rum
Pro nto , ago ra j temo s no s s o s po nteiro s c riado s . Ago ra, vamo s ver realmente c o mo eles
Blo g
func io nam.
Parc erias Referncia
Reco mendamo s Refernc ia quando no s referimo s diretamente ao identific ado r do endere o da mem ria.
A mem ria na verdade uma grande tabela c o m c lulas s equenc iais , c ada c lula tem s eu pr prio
endere o que s egue um padro c o ntnuo . Ou s eja, a primeira c lula s er 0x00000000, a s egunda
Anncio s Go o gle
0x00000001, a terc eira 0x00000002, e as s im po r diante.
C++ Quando faz emo s refernc ia, es tamo s o btendo exatamente es te valo r, que o endere o da c lula
na mem ria.
Programacao A refernc ia dada pelo o perado r &.
Java to c++ Ento , vamo s imaginar que temo s uma varivel inteira c hamada var1 que vale 100. Iremo s c riar
um po nteiro c hamado ptr1 que ir o bter o endere o de mem ria o nde es t var1.

01. #include <iostream>


02. #include <cstdlib>
03. using namespace std;
04.
05. int main (){
06. int var1 = 100;
07. int *ptr1;
08. ptr1 = &var1;
09. cout << ptr1 << endl;
10. system ("pause");
11. }

Perc eba que aqui n s atribumo s a ptr1 o endere o de mem ria de var1 (&var1) e no o valo r
c o ntido em var1.
Po rtanto , o valo r de ptr1 no s er 100, mas um endere o de mem ria 0x "algum hexadec imal".
Po is impo s s vel s aber qual s er o endere o de uma varivel antes da exec u o do pro grama.
Dereferncia
Derefernc ia quando no s referimo s ao valo r c o ntido no endere o armaz enado , o u s eja, o
c o ntrrio da o pera o de refernc ia.
A derefernc ia bus c a o valo r que es t no endere o gravado no po nteiro , is s o quer diz er que o
valo r o btido no es t no po nteiro , mas no endere o que ele apo nta. impo rtante entender is s o
po rque quando alteramo s o valo r referenc iado pelo po nteiro , na verdade es tamo s alterando o
valo r da varivel o riginal e no do po nteiro .
A dereferenc ia dada pelo o perado r *.
Ainda us ando o exemplo da varivel var1.

01. #include <iostream>


02. #include <cstdlib>
03. using namespace std;
04.
05. int main (){
06. int var1 = 100;
07. int *ptr1;
08. ptr1 = &var1;
09. cout << "O valor contido no endereco de memoria ";
10. cout << ptr1 <<" e "<< *ptr1 << endl;
11. system ("pause");
12. }

Po rtanto , res umidamente, po nteiro s s e utiliz am de refernc ia e derefernc ia para ac es s ar a


mem ria, s endo a refernc ia (&) o endereo de mem ria e a derefernc ia (*) o valo r
co nt ido no endere o de mem ria.
Erro s Co muns ao Utilizar Po nteiro s
Um do s pro blemas que levaram a extin o do us o de po nteiro s em linguagens mais rec entes
bas eadas em C s o o s erro s de l gic a c o metido s po r pro gramado res (inc lus ive experientes ) que
muitas vez es levava o pro grama ao c ras h o u erro fatal. A s eguir, es to alguns pro blemas
c o muns que lidamo s ao trabalharmo s c o m po nteiro s .
Po nteiro s devem s empre apo ntar para algum endere o de mem ria. Po rtanto , to do po nteiro deve
s er inic ializ ado antes de s er utiliz ado .
Ex.: int *ptr1; cout << ptr1;.
http://www.tiexpert.net/programacao/c/ponteiros.php 6 / 17
C/C++ - Ponteiros, referncia e dereferncia 19/10/15
Po nteiro s no guardam valo res , apenas endere o s de mem ria, o u s eja, s e atribumo s um valo r
ao po nteiro , es s e valo r s er um no vo endere o de mem ria.
Ex.: ptr1 = &var1; ptr1 = 100;
N s mudamo s o endere o de mem ria que ptr1 es t apo ntando , ago ra ele no apo nta mais para
o endere o de var1, e s im, para o endere o 100. Mas , o que tem no endere o 0x100 ? Es s e um
erro muito c o mum.
Inic ializ ar um po nteiro c o m o valo r de uma derefernc ia.
Ex.: int *ptr1 = *var1;.
Es s es s o alguns do s erro s mais c o muns , embo ra pratic amente to do s o s c o mpilado res s o
c apaz es de impedir que eles o c o rram.

Autor: Denys William Xavier


Este artigo est sob Licena Creative Commons.

Typedef - Defini o de No mes de Tipo s C /C ++ Po nteiro s de Struc t

Go s to u? Es te artigo fo i
Indique no s s o s ite! lido 33036 vez es

Pginas Relacio nadas

C/C++ - Po nteiro s de Struc t


C/C++ - Po nteiro s para Po nteiro s
C/C++ - Po nteiro de Veto r
C/C++ - Po nteiro Co mo Argumento de Fun o
JavaSc ript - Array (veto res )
Java - This - auto -refernc ia

Programao Algortmo | C/C++ | Java Quem Somos

Web HTML/XHTML | JavaScript | PHP Contato

Sist ema Operacional Comandos de DOS | Windows | Linux | Mac/BSD Termos de Uso

Office Word/Wirter | Excel/Calc WWW.TIEXPERT.NET 2007 - 2010

reas do Sit e Downloads | Frum | Blog

http://www.tiexpert.net/programacao/c/ponteiros.php 7 / 17
C/C++ - Ponteiros de Struct 19/10/15

S iga-no s no T wit t er
FEED RS S - O que isso ?
Adicio ne ao s Favo rit o s

Buscar
BLOG FRUM SIT EMAP QUEM SOMOS CONT AT O

Pro gramao TI Expert Pro grama o C/C++ Po nteiro s de Struc t Enquete


Algo ritmo Ponteiro de Struct O Go o gle C hro me OS
ir desbancar o
C/C++
Vimo s a po uc o c o mo c riar uma es trutura de dado s agrupado (s truc t), c o mo definir um no me Micro so f t Windo ws 7?
Java es s a es trutura c o m typedef e c o mo c riar um po nteiro para indic ar um endere o de mem ria. s im
Web Ago ra, vamo s no s apro fundar um po uc o mais nes s e as s unto vendo c o mo pro c edemo s c o m um
no
po nteiro de s truc t.
HTML/XHTML
Co mo vimo s anterio rmente, um s truc t c o ns is te em vrio s dado s agrupado s em apenas um. Para parciais vo t ar
JavaScript ac es s armo s c ada um des s es dado s , us amo s um po nto (.) para indic ar que o no me s eguinte o
PHP no me do membro .
Um po nteiro guarda o endere o de mem ria que po de s er ac es s ado diretamente.
Sistema Operacio nal
O pro blema aqui es t no s eguinte, c o mo ac es s aremo s um membro de uma es trutura de dado s
Co mando s de DOS us ando um po nteiro ? Po is s imples . Para is s o , bas ta us armo s o que c hamamo s de "s eta". A
Windo ws "s eta" c o ns is te de um s inal de meno s e um maio r (->).

Linux Po rtanto , po demo s c riar no s s o s truc t do mes mo jeito de s empre e no s s o po nteiro tambm. Mas ,
quando fo rmo s ac es s ar um membro des s a es trutura us ando um po nteiro n s no us aremo s um
Mac/BSD po nto , mas uma s eta.
Office Vejamo s :
Wo rd / Writer 01. #include <iostream>
Excel / Calc 02. #include <cstdlib>
03. using namespace std;
reas do Site 04.
05. typedef struct data Data;
Do wnlo ad
06.
F rum 07. struct data {
08. short dia;
Blo g 09. short mes;
10. int ano;
Parc erias 11. };
12.
Reco mendamo s
13. int main (void){
14. Data data; //varivel data do tipo struct data
Anncio s Go o gle 15. Data *hoje; //ponteiro hoje para um tipo struct data
16. hoje = &data; //hoje aponta para o endereo de data
Struct c++ 17.
18. //dados sendo inseridos na varivel data
19. hoje->dia = 20;
20. hoje->mes = 1;
21. hoje->ano = 2009;
22.
23. //mostrando o que est gravado no endereo contido em hoje
24. cout << "Data registrada:"<<endl;
25. cout << hoje->dia <<"/"<< hoje->mes <<"/"<< hoje->ano << endl;
26. system ("pause");
27. }

Ago ra, h mais uma maneira de ac es s armo s um membro da es trutura us ando um po nteiro . Es ta
o utra fo rma c o ns is te em indic ar de qual po nteiro no s referimo s c o lo c ando o dereferenc iado r
entre parentes es , as s im (*ho je). Des s a fo rma po demo s ac es s ar diretamente us ando um po nto
(.).
No exemplo abaixo us amo s apenas po nteiro s c o m dereferenc iado r para es c rever no struct data.

01. #include <iostream>


02. #include <cstdlib>
03. using namespace std;
04.
05. typedef struct data Data;
06.
07. struct data {
08. short dia;
09. short mes;
10. int ano;
11. };
12.
13. int main (void){
14. Data data; //varivel data do tipo struct data
15. Data *hoje; //ponteiro hoje para um tipo struct data
16. hoje = &data; //hoje aponta para o endereo de data
17.
18. //dados sendo inseridos na varivel data
19. (*hoje).dia = 20;
20. (*hoje).mes = 1;
21. (*hoje).ano = 2009;
22.
23. //mostrando o que est gravado no endereo contido em hoje
24. cout << "Data registrada:"<<endl;
25. cout << (*hoje).dia <<"/"<< (*hoje).mes <<"/"<< (*hoje).ano << endl;
26. system ("pause");
27. }

Co nc luindo , po demo s ac es s ar um membro de um tipo de dado es trutura de dado us ando


po nteiro de duas fo rmas :
Us ando um dereferenc iado r entre parntes es e um po nto (.) para indic ar o membro .
Us ando o pr prio po nteiro e uma s eta (->) para indic ar o membro .

Autor: Denys William Xavier


Este artigo est sob Licena Creative Commons.

Po nteiro s , refernc ia e derefernc ia C /C ++ Po nteiro de Veto r

Go s to u? Es te artigo fo i
Indique no s s o s ite! lido 54642 vez es

http://www.tiexpert.net/programacao/c/ponteiro-struct.php 8 / 17
C/C++ - Ponteiros de Struct 19/10/15
Pginas Relacio nadas

C/C++ - Es trutura de Dado s - STRUCT


C/C++ - Typedef - Defini o de No mes de Tipo s
C/C++ - Po nteiro s para Po nteiro s
C/C++ - Po nteiro de Veto r
C/C++ - Po nteiro s , refernc ia e derefernc ia
C/C++ - Po nteiro Co mo Argumento de Fun o
C/C++ - Po nteiro s Nulo s e Vaz io s (Null Po inters e Vo id
Po inters )
Java - This - auto -refernc ia

Programao Algortmo | C/C++ | Java Quem Somos

Web HTML/XHTML | JavaScript | PHP Contato

Sist ema Operacional Comandos de DOS | Windows | Linux | Mac/BSD Termos de Uso

Office Word/Wirter | Excel/Calc WWW.TIEXPERT.NET 2007 - 2010

reas do Sit e Downloads | Frum | Blog

http://www.tiexpert.net/programacao/c/ponteiro-struct.php 9 / 17
C/C++ - Ponteiro de Vetor 19/10/15

S iga-no s no T wit t er
FEED RS S - O que isso ?
Adicio ne ao s Favo rit o s

Buscar
BLOG FRUM SIT EMAP QUEM SOMOS CONT AT O

Pro gramao TI Expert Pro grama o C/C++ Po nteiro de Veto r Enquete


Algo ritmo Ponteiros de vetor O Go o gle C hro me OS
ir desbancar o
C/C++
Co mo j vis to at ago ra, po nteiro s s o variveis que guardam o endere o de mem ria de o utra Micro so f t Windo ws 7?
Java varivel. Veremo s ago ra, c o mo s e aplic a es te rec urs o em veto res . s im
Web Rec apitulando o que s o veto res : variveis de endere o c o ntinuo na mem ria. Ou s eja, enquanto
no
uma varivel do tipo int o c upa, po r exemplo , um blo c o de mem ria, um veto r de 5 po s i es do
HTML/XHTML tipo int o c upa 5 blo c o s de mem ria. parciais vo t ar
JavaScript Para ac es s armo s c ada item de um veto r us amo s o s ndic es que fic am entre c o lc hetes ([]).
PHP H duas fo rmas de trabalhar c o m po nteiro s para veto r.
Sistema Operacio nal 1. Us ar ndic es no po nteiro c o mo s e ele fo s s e um veto r:
Co mando s de DOS po nteiro = veto r;
po nteiro [indic e1] = qualquer valo r para s er gravado nes s e ndic e;
Windo ws po nteiro [indic eN] = qualquer valo r para s er gravado nes s e ndic e;
Linux Pres te aten o no s eguinte detalhe. Apes ar de s er po nteiro , ao atribuirmo s um valo r ao ndic e
Mac/BSD no us amo s o s inal de derefernc ia (*).

Office 01. #include <stdio.h>


02. #include <stdlib.h>
Wo rd / Writer 03.
Excel / Calc 04. int main (void){
05. int vetor [2];
reas do Site 06. int *v; // ponteiro
Do wnlo ad 07. v = vetor;
08. v[0] = 123;
F rum 09. v[1] = 456;
10. printf ("vetor[0] = %d\n", vetor[0]);
Blo g
11. printf ("vetor[1] = %d\n\n", vetor[1]);
12. system ("pause");
Parc erias 13. }
Reco mendamo s
2. Us ar o que c hamamo s de aritmtic a de po nteiro s .
Aritmtic a de po nteiro s c o ns is te em mo dific ar o valo r do po nteiro para ele indic ar o pr ximo
Anncio s Go o gle endere o de mem ria do veto r.
C c++ c# Exemplific ando , s eria algo c o mo :
po nteiro = endere o do ndic e 0 do veto r;
*(po nteiro +indic e1) = qualquer valo r para s er gravado nes s e ndic e;
*(po nteiro +indic eN) = qualquer valo r para s er gravado nes s e ndic e;
Perc eba que aqui atribuimo s um valo r ao veto r us ando um dereferenc iado r do po nteiro (*).
Quando s o mamo s um nmero ao po nteiro , o que es tamo s faz endo , na verdade, s o mar o
nmero nec es s rio de bytes para o pr ximo endere o .
Ex.: Se tivermo s um po nteiro para um veto r de inteiro , quando fo rmo s c alc ular o terc eiro es pa o
faremo s *(po nteiro +3). Internamente s er c alc ulado o s eguinte -> po nteiro + 3 o tamanho de
int (4 bytes ). Ento , 3 4 = 12 bytes .
po nteiro = 0x00001100;
po nteiro + 12 bytes ;
no vo po nteiro = 0x00001100C;
Apes ar de s er uma c o nta s imples , no prec is amo s no s preo c upar c o m is s o . Po rque o pr prio
s is tema c uida de exec utar es te c lc ulo .

01. #include <stdio.h>


02. #include <stdlib.h>
03.
04. #define MAX 10
05.
06. int main (void){
07. int vetor [MAX], i, valor, *v;
08. v = &vetor[0];
09. printf ("Digite um valor para ser gravado no\n");
10. printf ("indice\tEndereco de Memoria\n");
11. for (i=0; i<MAX; i++) {
12. printf ("[%d]\t%p\t\t-> ", i, (v+i));
13. scanf ("%d", &valor);
14. getchar();
15. *(v+i) = valor; //valor gravado no endereo apontado pelo
ponteiro
16. }
17. system ("cls");
18. printf ("Os valores gravados no vetor foram:\n");
19. for (i=0; i<MAX; i++) {
20. printf("vetor[%d], ponteiro (%p) = %d\n", i, (v+i), vetor[i]);
21. }
22. system ("pause");
23. }
Fa a o Do wnlo ad des te C digo

Autor: Denys William Xavier


Este artigo est sob Licena Creative Commons.

Po nteiro s de Struc t C /C ++ Po nteiro Co mo Argumento de Fun o

Go s to u? Es te artigo fo i
Indique no s s o s ite! lido 37480 vez es

Pginas Relacio nadas

C/C++ - Veto res Unidimens io nais


C/C++ - Po nteiro s de Struc t
C/C++ - Po nteiro s para Po nteiro s
C/C++ - Po nteiro s , refernc ia e derefernc ia
http://www.tiexpert.net/programacao/c/ponteiro-vetor.php 10 / 17
C/C++ - Ponteiro de Vetor 19/10/15
C/C++ - Po nteiro Co mo Argumento de Fun o
C/C++ - Po nteiro s Nulo s e Vaz io s (Null Po inters e Vo id
Po inters )
Java - Veto res e Matriz es
PHP - Arrays , Arrays As s o c iativo s , Veto res e Matriz es
JavaSc ript - Array (veto res )
Java - This - auto -refernc ia

Programao Algortmo | C/C++ | Java Quem Somos

Web HTML/XHTML | JavaScript | PHP Contato

Sist ema Operacional Comandos de DOS | Windows | Linux | Mac/BSD Termos de Uso

Office Word/Wirter | Excel/Calc WWW.TIEXPERT.NET 2007 - 2010

reas do Sit e Downloads | Frum | Blog

http://www.tiexpert.net/programacao/c/ponteiro-vetor.php 11 / 17
C/C++ - Ponteiro Como Argumento de Funo 19/10/15

S iga-no s no T wit t er
FEED RS S - O que isso ?
Adicio ne ao s Favo rit o s

Buscar
BLOG FRUM SIT EMAP QUEM SOMOS CONT AT O

Pro gramao TI Expert Pro grama o C/C++ Po nteiro Co mo Argumento de Fun o Enquete
Algo ritmo Ponteiros como Argumento de Funes O Go o gle C hro me OS
ir desbancar o
C/C++
Vimo s at ago ra, qual a impo rtnc ia do s po nteiro s , c o mo utiliz -lo s e princ ipalmente qual s ua Micro so f t Windo ws 7?
Java s intaxe. s im
Web Ago ra, c o me aremo s a tratar de po nteiro s em t pic o s mais avan ado s , c o me ando c o m o us o
no
de po nteiro s c o mo argumento de fun es .
HTML/XHTML
Primeiramente, iremo s entender qual a vantagem de us armo s po nteiro s c o mo argumento s . parciais vo t ar
JavaScript
At ago ra, apenas havamo s utiliz ado argumento s de valo res .
PHP
Os argumento s de valo res s o c pias do s valo res do s dado s pas s ado s a fun o em s ua
Sistema Operacio nal c hamada.

Co mando s de DOS Exemplo :

Windo ws 01. #include <iostream>


02. using namespace std;
Linux
03.
Mac/BSD 04. int mostrarNumero (int nr) {
05. cout << nr << endl;
Office 06. }
Wo rd / Writer 07.
08. int main (void) {
Excel / Calc 09. int n = 10;
reas do Site 10. mostrarNumero(n);
11. system("pause");
Do wnlo ad 12. }
F rum
No exemplo ac ima, quando pas s amo s a varivel n para a fun o mostrarNumero o valo r de n
Blo g c o piado para nr. Ou s eja, o valo r que es t s endo manipulado dentro da fun o no o valo r
o riginal, mas uma c pia.
Parc erias
Is s o no s impo s s ibilita de ac es s ar a varivel diretamente, faz endo c o m que muitas vez es
Reco mendamo s tenhamo s que fo r ar no s s a fun o reto rnar algum valo r.
O pro blema es t quando c riamo s uma fun o que afeta diretamente vrias partes da mem ria.
Nes te c as o , no po s s vel apenas reto rnarmo s um valo r para s er tratado no vamente dentro do
Anncio s Go o gle c o rpo do pro grama.
C++ Abaixo es ta um exemplo muito s imples , mas que s imples mente no atende a no s s as
expec tativas .
C c++
01. #include <iostream>
02. using namespace std;
03.
04. int trocar (int a, int b) {
05. int aux;
06. aux = a;
07. a = b;
08. b = aux;
09. }
10.
11. int main (void) {
12. int var1 = 10, var2 = 50;
13. trocar (var1, var2);
14. cout << "O valor de var1 e " << var1 << endl;
15. cout << "O valor de var2 e " << var2 << endl;
16. system("pause");
17. }

A idia da fun o ac ima pas s ar o valo r de uma varivel para o utra. Mas , ao exec utarmo s es te
c digo , perc ebemo s que ao final o s valo res de var1 e var2 c o ntinuam o s mes mo s .
Po r qu? Simples . O que fo i tro c ado dentro da fun o tro c ar fo i a c pia do s valo res de var1 e
var2 que s o a e b dentro da fun o . Ou s eja, o que fo i alterado na verdade fo i o valo r de a que
pas s o u para b e b que pas s o u para a.
A tro c a ac o ntec eu, mas no c o m as variveis que queramo s .
Mas , s e ao invs de utiliz armo s o valo r da varivel, utiliz s s emo s s ua refernc ia de mem ria, o u
s eja, o s eu po nteiro .
Des s a fo rma, a fun o s aberia que o valo r a s er tratado j exis te e es t exatamente no lo c al da
mem ria que indic armo s . Po rtanto , o valo r que s eria tratado dentro da fun o no s eria uma
c pia, mas a varivel o riginal.
Ento , vamo s refo rmular a fun o do exemplo anterio r us ando a refernc ia do s po nteiro s
(endere o s c o ntido s no s po nteiro s ) c o mo argumento s des s a vez .

01. #include <iostream>


02. using namespace std;
03.
04. int trocar (int &a, int &b) {
05. int aux;
06. aux = a;
07. a = b;
08. b = aux;
09. }
10.
11. int main (void) {
12. int var1 = 10, var2 = 50;
13. trocar (var1, var2);
14. cout << "O valor de var1 e " << var1 << endl;
15. cout << "O valor de var2 e " << var2 << endl;
16. system("pause");
17. }

Nes te c as o , us amo s o endere o c o mo fo rma de manipula o , e ento , c o ns eguimo s tro c ar o s


valo res de var1 e var2, po is a fun o no c o pio u o s valo res des s as variveis , ele manipulo u
diretamente s eus endere o s de mem ria.
Aqui, po demo s des tac ar mais uma vatangem que fo i a ec o no mia de mem ria. Po is , no fo i c riado
mais um es pa o de mem ria, j que n s utiliz amo s diretamente o endere o de mem ria j
alo c ado anterio rmente po r var1 e var2.

http://www.tiexpert.net/programacao/c/ponteiro-como-argumento-de-funcao.php 12 / 17
C/C++ - Ponteiro Como Argumento de Funo 19/10/15

Autor: Denys William Xavier


Este artigo est sob Licena Creative Commons.

Po nteiro de Veto r C /C ++ Po nteiro s para Po nteiro s

Go s to u? Es te artigo fo i
Indique no s s o s ite! lido 25486 vez es

Pginas Relacio nadas

C/C++ - Fun es
C/C++ - Fun es de Sada em C++
C/C++ - Fun es (c o m argumento s )
C/C++ - Po nteiro s de Struc t
C/C++ - Rec urs ividade
C/C++ - Fun es de Entrada em C++
C/C++ - Po nteiro s para Po nteiro s
C/C++ - Po nteiro s , refernc ia e derefernc ia
C/C++ - Fun es de Sada em C
C/C++ - Fun es de Entrada em C

Programao Algortmo | C/C++ | Java Quem Somos

Web HTML/XHTML | JavaScript | PHP Contato

Sist ema Operacional Comandos de DOS | Windows | Linux | Mac/BSD Termos de Uso

Office Word/Wirter | Excel/Calc WWW.TIEXPERT.NET 2007 - 2010

reas do Sit e Downloads | Frum | Blog

http://www.tiexpert.net/programacao/c/ponteiro-como-argumento-de-funcao.php 13 / 17
C/C++ - Ponteiros para Ponteiros 19/10/15

S iga-no s no T wit t er
FEED RS S - O que isso ?
Adicio ne ao s Favo rit o s

Buscar
BLOG FRUM SIT EMAP QUEM SOMOS CONT AT O

Pro gramao TI Expert Pro grama o C/C++ Po nteiro s para Po nteiro s Enquete
Algo ritmo Ponteiros para Ponteiros O Go o gle C hro me OS
ir desbancar o
C/C++
C/C++ no s permite c riar, tambm, po nteiro s c o m nveis de apo ntamento . O que is s o quer diz er? Micro so f t Windo ws 7?
Java Simples . po s s vel c riar um po nteiro que apo nte para o utro po nteiro , c riando as s im nveis , po is s im
um po nteiro po der apo ntar para o utro po nteiro , que, po r s ua vez , apo nta para o utro po nteiro ,
Web que apo nta para um po nteiro diferente e as s im po r diante. no
HTML/XHTML A s intaxe para s e c riar po nteiro s para po nteiro s a mes ma de po nteiro s c o muns , apenas a parciais vo t ar
JavaScript fo rma de ac es s ar s eus valo res diferente, po is para c ada nvel de apo ntamento us aremo s um
dereferenc iado r. Po r exemplo , s e um po nteiro apo nta para um po nteiro que apo nta para um valo r
PHP inteiro , para ac es s armo s es s e valo r inteiro a partir do primeiro po nteiro us aramo s do is
as ters c o s (**), ao invs de apenas um (*).
Sistema Operacio nal
Is s o s e d ao fato que um po nteiro po de mudar o valo r de o utro po nteiro de ac o rdo c o m s eu
Co mando s de DOS nvel.
Windo ws O exemplo abaixo demo ns tra uma s intaxe s imples .
Linux
01. #include <iostream>
Mac/BSD 02. using namespace std;
03.
Office 04. int main (void) {
Wo rd / Writer 05. int a=10, b=50;
06. int *ptr; // ponteiro de inteiro
Excel / Calc 07. int **ptrPtr; // ponteiro de um ponteiro inteiro
reas do Site 08. ptr = &a;
09. ptrPtr = &ptr;
Do wnlo ad 10. cout << "O valor final de ptrPtr e " << **ptrPtr << endl;
11. system("pause");
F rum
12. return EXIT_SUCCESS;
Blo g 13. }

Parc erias O c digo ac ima c o ntem duas variveis inteiras (a e b) inic ializ ado s c o m o s valo res 10 e 50
res pec tivamente. Lo go ap s , h uma varivel de po nteiro (*ptr) e uma varivel de po nteiro para
Reco mendamo s po nteiro (**ptrPtr).
Ento , atribuimo s o endere o da varivel inteira a em *ptr. Ago ra *prt apo nta para a. Ap s is s o ,
Anncio s Go o gle atribuimo s o endere o do po nteiro *ptr ao po nteiro **ptrPtr. Nes te mo mento **ptrPtr pas s a
apo ntar para *ptr.
C c++ Nes s e ins tante devemo s pres tar atenc o no s eguinte detalhe, no mo mento da impres s o da
mens agem "O valor final de ptrPtr e "... us amo s o po nteiro do po nteiro para c hegar at o
Programacao valo r de a.
Java c++ Entendendo o s Nveis de Apo ntamento
Quando us amo s po nteiro s de po nteiro s po demo s us ar o s nveis de apo ntamento que s o
determinado s pelo nmero de as teris c o s que prec edem o po nteiro .
Po rtanto , s e um po nteiro apo nta para um po nteiro que tambm apo nta para um po nteiro que
c o ntem um endere o de uma varivel char, us aramo s nes te c as o trs as ters c o s .

01. #include <iostream>


02. using namespace std;
03.
04. int main (void) {
05. char letra='a';
06. char *ptrChar;
07. char **ptrPtrChar;
08. char ***ptrPtr;
09. ptrChar = &letra;
10. ptrPtrChar = &ptrChar;
11. ptrPtr = &ptrPtrChar;
12. cout << "O valor final de ptrPtr e " << ***ptrPtr << endl;
13. system("pause");
14. return EXIT_SUCCESS;
15. }

Para entender melho r o ac es s o indireto que o po nteiro exec uta, vejamo s o diagrama abaixo .
Func io namento de po nteiro para po nteiro na mem ria

Es te diagrama demo ns tra o que c ada um do s as teris c o s repres enta. Sabendo dis s o po s s vel
alterar tanto o valo r final da varivel quanto o endere o apo ntado pelo s po nteiro s intermedirio s .
Vejamo s a exemplific a o abaixo .

01. #include <iostream>


02. using namespace std;
03.
04. int main (void) {
05. float var1 = 25.5;
06. float var2 = 72.8;
07. float *ptr;
08. float **ptrPtr;
09. ptr = &var1;
10. ptrPtr = &ptr;
11. cout << "O valor final de ptrPtr e " << **ptrPtr << endl;
12. cout << "Pois o endereco de ptr e " << ptr << endl;
13. *ptrPtr = &var2; //novo endereo no ponteiro intermedirio
14. cout << "\nO valor final de ptrPtr e " << **ptrPtr << endl;
15. cout << "Pois o endereco de ptr e " << ptr << endl;
16. system("pause");
17. return EXIT_SUCCESS;
18. }

No c digo ac ima po demo s perc eber a tro c a de um po nteiro intermedirio .

http://www.tiexpert.net/programacao/c/ponteiro-para-ponteiro.php 14 / 17
C/C++ - Ponteiros para Ponteiros 19/10/15
A princ pio atribuimo s o endere o da varivel var1 ao po nteiro ptr. Depo is , atribuimo s o endere o
do po nteiro ptr ao po nteiro ptrPtr.
Na primeira vez que mandamo s imprimir **ptrPtr (Impo rt ant e! No te o s do is as teris c o s ) s er
apres entado o valo r c o ntido em var1, po rque ptrPtr ac es s a var1 indiretamente pelo po nteiro ptr.
Quando faz emo s a o pera o *ptrPtr = &var2;, na verdade, no es tamo s alterando o valo r
c o ntido em var1, mas o endere o c o ntido no po nteiro ptr, po rque us amo s apenas um as teris c o
em ptrPtr.
Ou s eja, us ando apenas um as teris c o ac es s aremo s o po nteiro , no o valo r apo ntado pelo
po nteiro . Vejamo s :

Es s e as ters c o repres enta exatamente o po nteiro intermedirio . Po rtanto , ago ra o po nteiro ptr
no apo nta mais para var1, ele apo nta para var2.
Na s egunda vez que imprimimo s o valo r de **ptrPtr no aparec er o valo r de var1, mas o valo r
de var2, po rque o endere o c o ntido no po nteiro intermedirio ptr fo i alterado para apo ntar para
var2.

Autor: Denys William Xavier


Este artigo est sob Licena Creative Commons.

Po nteiro Co mo Argumento de Fun o Po nteiro s Nulo s e Vaz io s (Null Po inters e Vo id Po inters )


C /C ++

Go s to u? Es te artigo fo i
Indique no s s o s ite! lido 38257 vez es

Pginas Relacio nadas


C/C++ - Po nteiro de Veto r
C/C++ - Po nteiro s , refernc ia e derefernc ia
C/C++ - Po nteiro Co mo Argumento de Fun o
Java - Get e Set - Mto do s Ac es s o res
Java - Public , Private e Pro tec ted
JavaSc ript - Array (veto res )
Java - Ac es s o a Atributo s e Mto do s
Java - This - auto -refernc ia

Programao Algortmo | C/C++ | Java Quem Somos

Web HTML/XHTML | JavaScript | PHP Contato

Sist ema Operacional Comandos de DOS | Windows | Linux | Mac/BSD Termos de Uso

Office Word/Wirter | Excel/Calc WWW.TIEXPERT.NET 2007 - 2010

reas do Sit e Downloads | Frum | Blog

http://www.tiexpert.net/programacao/c/ponteiro-para-ponteiro.php 15 / 17
C/C++ - Ponteiros Nulos e Vazios (Null Pointers e Void Pointers) 19/10/15

ANNCIOS NO GOOGLE. S iga-no s no T wit t er


FEED RS S - O que isso ?
Podemos ajudar voc a criar o seu. Vamos t rabalha
Adicio ne ao s Favo rit o s

Buscar
BLOG FRUM SIT EMAP QUEM SOMOS CONT AT O

Pro gramao TI Expert Pro grama o C/C++ Po nteiro s Nulo s e Vaz io s (Null Po inters e Vo id Po inters ) Enquete
Algo ritmo Ponteiros Nulos e Vazios O Go o gle C hro me OS
ir desbancar o
C/C++
At o mo mento , temo s es tudado vrio s tipo s de po nteiro s que apo ntam para o utro s lugares e Micro so f t Windo ws 7?
Java as s im po r diante. Mas , C e C++ po s s uem o utras fo rmas de po nteiro s , e, no o brigato riamente, s im
um po nteiro tem que apo ntar para algum lugar, po is um po nteiro s imples mente po de apo ntar para
Web lugar nenhum. no
HTML/XHTML Null Po inters (Po nteiro s Nulo s) parciais vo t ar
JavaScript Nem s empre um po nteiro deve apo ntar para algum lugar, princ ipalmente s e es te lugar ainda no
PHP exis tir. Ento , po s s vel um po nteiro s er nulo .

Sistema Operacio nal Para um po nteiro apo ntar para lugar algum devemo s lhe atribuir o valo r inteiro 0, o u a c o ns tante
NULL. No impo rta s e o po nteiro fo r do tipo flo at, int, c har, etc ., po is auto matic amente haver um
Co mando s de DOS typec as ting para o tipo de dado c o rreto .
Windo ws impo rtante entender es te c o nc eito de po nteiro nulo po rque fac ilita o trabalho c o m es truturas de
mem ria dinmic as c o mo lis tas enc adeadas , filas , arvo res binrias , etc . Po is , na maio r parte do
Linux
tempo exis tir um po nteiro , mas no um endere o fs ic o j c riado na mem ria.
Mac/BSD
01. #include <iostream>
Office 02. using namespace std;
03.
Wo rd / Writer
04. int main (void) {
Excel / Calc 05. int *nullPointer;
06. nullPointer = NULL;
reas do Site 07. cout << nullPointer << endl;
Do wnlo ad 08. system ("pause");
09. return EXIT_SUCCESS;
F rum 10. }
Blo g
Vo id Po inters (Po nteiro s Vazio s)
Parc erias Chamamo s de po nteiro s vaz io s qualquer po nteiro que no po s s ua um tipo de dado es pec fic o , o u
Reco mendamo s s eja, s e s eu tipo de dado fo r vo id.
Po nteiro s vaz io s o u vo id po inters s o po nteiro s genric o s que po dem apo ntar para qualquer
o utro tipo de dado , mas traz em c o ns igo pro blemas l gic o s .
Anncio s Go o gle
Tais pro blemas res idem no fato de que c o mo s o po nteiro s vaz io s - no h um tipo de dado
Void pointer es pec fic o - ento , no po demo s determinar s eu tamanho , as s im c o mo tambm no po demo s
dereferenc i-lo diretamente.
Null pointer Es s es pro blemas s o fac ilmente res o lvido s s e induz irmo s o endere o vo id para o endere o do
tipo de dado c o rreto , da mes ma fo rma que exec utamo s qualquer typec as t.
C c++ c#
Entender o c o nc eito de vo id po int ers (po nteiro s vaz io s ) de s uma impo rtnc ia para a
c o mpreens o de es truturas dinmic as de mem ria, po rque trabalharemo s o tempo to do c o m
fun es que reto rnam endere o s de mem ria genric o s (que po dem s er qualquer tipo de
endere o de mem ria, po rtanto s em tipo de dado - vo id).

01. #include <iostream>


02. using namespace std;
03.
04. int main (void) {
05. void *ptr;
06. int *ptrVar1, var1 = 10;
07. float *ptrVar2, var2 = 50.123;
08. ptr = &var1; // ponteiro aponta para um inteiro
09. ptrVar1 = (int*) ptr; // typecasting: ponteiro genrico p/ inteiro
10. cout << *ptrVar1 << endl;
11. ptr = &var2; // o mesmo ponteiro aponta agora para um float
12. ptrVar2 = (float*) ptr; // typecasting: ponteiro genrico p/ float
13. cout << *ptrVar2 << endl;
14. system ("pause");
15. return EXIT_SUCCESS;
16. }

Co mo demo ns trado no exemplo ac ima, po nteiro s vaz io s po dem apo ntar para qualquer tipo de
dado (inteiro , flo at, c har, etc ), po rm no po dem s er dereferenc iado s diretamente. Para
c o nto rnar es te pro blema, us amo s typec as t para que um po nteiro c o nc reto po s s a s er
dereferenc iado no lugar do po nteiro genric o .

Autor: Denys William Xavier


Este artigo est sob Licena Creative Commons.

Po nteiro s para Po nteiro s C /C ++

Go s to u? Es te artigo fo i
Indique no s s o s ite! lido 24528 vez es

Pginas Relacio nadas

C/C++ - Po nteiro s de Struc t


C/C++ - Po nteiro s para Po nteiro s
C/C++ - Po nteiro de Veto r
C/C++ - Po nteiro s , refernc ia e derefernc ia
C/C++ - Po nteiro Co mo Argumento de Fun o

Programao Algortmo | C/C++ | Java Quem Somos

http://www.tiexpert.net/programacao/c/null-pointer-void-pointer.php 16 / 17
C/C++ - Ponteiros Nulos e Vazios (Null Pointers e Void Pointers) 19/10/15
Web HTML/XHTML | JavaScript | PHP Contato

Sist ema Operacional Comandos de DOS | Windows | Linux | Mac/BSD Termos de Uso

Office Word/Wirter | Excel/Calc WWW.TIEXPERT.NET 2007 - 2010

reas do Sit e Downloads | Frum | Blog

http://www.tiexpert.net/programacao/c/null-pointer-void-pointer.php 17 / 17

Você também pode gostar