SlideShare una empresa de Scribd logo
1 de 29
Descargar para leer sin conexión
Tutoria AEDSI
Pablo Silva
Revisão
Nesta revisão, iremos relembrar os conceitos
importantes de ponteiros e aplicá-los para
entender o que é passagem de parâmetros por
referência para uma função e como ela se
diferencia da passagem por valor.
Ponteiros?
- Ponteiros são tipos de variáveis que recebem
endereços.
- Esses endereços são os lugares da memória
onde estão armazenados valores de variáveis.
- O nome ponteiro é uma analogia, referindo que
esse tipo de variável “aponta”para um endereço
de memória.
Estrutura de um ponteiro
int * pont;
Tipo do ponteiro: como dito o ponteiro é uma
variável, logo precisa de um tipo. Este tipo,
indica o tipo de valor que está armazendo no
endereço associado com este ponteiro, ou em
outras palavras, qual o tipo de dado que o
espaço de memória aceita.
Operador asterisco: o que diferencia
ponteiros das outras variáveis é o operador
asterisco.
Nome do ponteiro: segue as mesmas regras de
nomeação de variáveis.
Usando um ponteiro
Vamos ver como é a estrutura de uma função
int main() {
int a = 10;
int* p = &a;
return 0;
}
Tipos compatíveis: note que o tipo
de endereço que estamos
passando para o ponteiro é int,
uma vez que nosso ponteiro é do
tipo inteiro. Se no lugar de a fosse
atribuído um caracter por exemplo
(char b), o programa não
compilaria, pois estaríamos
lidando com tipos incompatíveis.
Operador endereço: Uma vez que um
ponteiro recebe um endereço de uma
variável, foi preciso definir um
operador que extraísse esse endereço.
O operador que faz isso é o operador
de endereço. &a significa “O endereço
da variável a”.
Desenhos para analogia
A partir de agora, vamos pensar em variáveis como “caixinhas”
que recebem valores dentro delas. Exemplo:
int main() {
int a = 10;
return 0;
}
A representação destas variáveis ficariam assim:
10
a
&43jjuiop
a é o nome
da caixa.
8 dígitos seguidos do símbolo de
endereço, é o endereço desta caixa,
chamado também de referência.
Valor da caixa
Um fato importante aqui:
variáveis comuns só recebem
valores (int, char, float...). Uma
caixa que representa uma
variável comum nunca receberá
um endereço como seu valor
(apesar de que toda caixa
possui um endereço de
memória)
Desenhos para analogia
A partir de agora, vamos pensar em variáveis como “caixinhas”
que recebem valores dentro delas. Exemplo:
int main() {
int a = 10;
int* p = &a;
return 0;
}
A representação da caixa de um ponteiro:
&43jjuiop
p
&98sd66dd
p é o nome
da caixa.
Por ser uma variável, um ponteiro também
precisa ser armazenada na memória e por
isso tem um endereço de caixa.
Um fato importante aqui:
variáveis ponteiros recebem
somente endereços e não
valores! O conteúdo de um
ponteiro nunca será um int,
char, etc. mas sim um endereço
de um tipo. Para este caso, o
endereço é do tipo inteiro
(variável a é do tipo inteiro).
Endereço de a
(valor que o
ponteiro recebeu)
Desenhos para analogia
Uma possível representação da relação entre ponteiro e varíavel
para qual ele aponta seria:
int main() {
int a = 10;
int* p = &a;
return 0;
}
&43jjuiop
p
&98sd66dd
10
a
&43jjuiop
O ponteiro aponta para a
caixa de a, porque o
endereço de a foi passado
para ele. Uma característica
do ponteiro importantíssima
é que por apontar para a
caixa de a, ele tem acesso ao
seu valor (10) e pode alterá-
lo a qualquer momento!
Características e funções de um ponteiro
Como dito, um ponteiro tem acesso ao valor da variável para
qual ele aponta. Vamos ver como alterar esse valor através do
ponteiro.
int main() {
int a = 10;
int* p = &a;
*p = 5;
return 0;
}
10
a
&43jjuiop
1
2
3
Passo 1:
Variável a é criada.
Características e funções de um ponteiro
Como dito, um ponteiro tem acesso ao valor da variável para
qual ele aponta. Vamos ver como alterar esse valor através do
ponteiro.
int main() {
int a = 10;
int* p = &a;
*p = 5;
return 0;
}
&43jjuiop
p
&98sd66dd
10
a
&43jjuiop
1
2
3
Passo 2:
O ponteiro p é criado e o endereço
de a é atribuído à ele. Portanto p
aponta para a.
Características e funções de um ponteiro
Como dito, um ponteiro tem acesso ao valor da variável para
qual ele aponta. Vamos ver como alterar esse valor através do
ponteiro.
int main() {
int a = 10;
int* p = &a;
*p = 5;
return 0;
}
&43jjuiop
p
&98sd66dd
10
a
&43jjuiop
1
2
3
Passo 3:
O conteúdo de a é acessado e
alterado utilizando o operador de
acesso do ponteiro.
O conjunto *(nome_do_ponteiro) é o operador de acesso ao conteúdo da variável
para qual o ponteiro aponta. Ao utilizarmos este operador, é possível alterar o valor
da variável para o ponteiro aponta ou somente acessá-lo.
5
Passagem por referência
O exemplo anterior é somente uma demonstração. Utilizar um ponteiro
para alterar o valor da variável neste caso não seria necessário, pois todo
nosso programa está na main e conseguimos acessar esta variável a
qualquer momento.
Este fato muda, quando estamos trabalhando com funções. Lembre-se
que as variáveis dentro do escopo de uma função, podem ser acessadas
somente lá dentro. Portanto, se quisermos alterar o valor de uma variável
que está na main dentro de uma função, a única maneira seria fazer esta
função retornar o valor e atribuirmos este valor a variável para qual
queremos alterar o valor. Vamos ver um exemplo.
Passagem por valor
Suponha que queremos alterar o valor de t utilizando uma
função e sem utilizar ponteiros. Teríamos que fazer algo do tipo:
int main() {
int t = 10;
t = valor(5);
return 0;
}
int valor(int a) {
a = 5;
return a;
}
O que acontece nesse caso é que t tinha 10
quando foi criado. Chamamos então a
função valor com o novo valor que
queremos para t (5) e atribuímos a
chamada desta função para a variável t.
Neste caso, quando o programa terminar t
terá 5, que é o retorno função valor.
Passagem por valor
Lembrando, isto é só um exemplo, sem muita utilidade somente
para entendermos os conceitos de passagem por valor e
referência.
int main() {
int t = 10;
t = valor(5);
return 0;
}
int valor(int a) {
a = 5;
return a;
}
Neste caso o que estamos fazendo, é
passando um valor para função (para este
exemplo o valor foi 5, mas poderia ter sido
qualquer valor de inteiro). Tivemos que
atribuir o valor de retorno para t, justamente
porque a passagem de parâmetros para a
função, foi feita através da passagem por
valor. Quando utilizamos esta abordagem,
tudo que acontece na função, tem alteração
somente dentro dela e quando ela acaba,
todos os valores gerados lá são destruídos e o
que sobra é somente um retorno.
Passagem por valor
Vamos analisar um outro exemplo de passagem por valor. Vamos ver o que acontece
quando tentamos alterar o valor de uma varíavel através de uma função que não tem
retorno e utilizamos passagem por valor.
int main() {
int t = 10;
valor(t);
return 0;
}
void valor(int a) {
a = 5;
} 1
2
3
4
5
Vamos ver a execução passo a
passo.
Passagem por valor
Vamos analisar um outro exemplo de passagem por valor. Vamos ver o que acontece
quando tentamos alterar o valor de uma varíavel através de uma função que não tem
retorno e utilizamos passagem por valor.
int main() {
int t = 10;
valor(t);
return 0;
}
void valor(int a) {
a = 5;
} 1
2
3
4
5
Passo 1
10
t
&43jjuiop
Passagem por valor
Vamos analisar um outro exemplo de passagem por valor. Vamos ver o que acontece
quando tentamos alterar o valor de uma varíavel através de uma função que não tem
retorno e utilizamos passagem por valor.
int main() {
int t = 10;
valor(t);
return 0;
}
void valor(int a) {
a = 5;
} 1
2
3
4
5
Passo 2: a execução na main é
interrompida e a função é
chamada. O valor de t é enviado
para a função.
10
t
&43jjuiop
10
Passagem por valor
Vamos analisar um outro exemplo de passagem por valor. Vamos ver o que acontece
quando tentamos alterar o valor de uma varíavel através de uma função que não tem
retorno e utilizamos passagem por valor.
int main() {
int t = 10;
valor(t);
return 0;
}
void valor(int a) {
a = 5;
} 1
2
3
4
5
Passo 3: a variável que
representa o parâmetro da
função é criada. Note que o
endereço de a é diferente do
endereço de t.
10
t
&43jjuiop
10
10
a
&456699oo
Passagem por valor
Vamos analisar um outro exemplo de passagem por valor. Vamos ver o que acontece
quando tentamos alterar o valor de uma varíavel através de uma função que não tem
retorno e utilizamos passagem por valor.
int main() {
int t = 10;
valor(t);
return 0;
}
void valor(int a) {
a = 5;
} 1
2
3
4
5
Passo 4: a variável a tem seu
valor alterado para 5.
10
t
&43jjuiop
10
a
&456699oo
5
Passagem por valor
Vamos analisar um outro exemplo de passagem por valor. Vamos ver o que acontece
quando tentamos alterar o valor de uma varíavel através de uma função que não tem
retorno e utilizamos passagem por valor.
int main() {
int t = 10;
valor(t);
return 0;
}
void valor(int a) {
a = 5;
} 1
2
3
4
5
Passo 5: a função termina e a
execução na main é recomeçada
e o programa se encerra. Neste
momento nada que foi feito na
função existe mais por que ela
acabou.
10
t
&43jjuiop
Passagem por valor
O que aconteceu com a variável t que estava na main? NADA. Não tivemos sucesso
em alterar seu valor desta vez, porque o que passamos para função foi somente o
valor de t, que não tem nenhuma referência com a variável.
int main() {
int t = 10;
valor(t);
return 0;
}
void valor(int a) {
a = 5;
} 1
2
3
4
5 10
t
&43jjuiop
Passagem por referência
Vamos então agora, tentar utilizar a passagem por referência. Referência para nós é o
mesmo que endereço. Vamos então agora, passar o endereço de t para função e não
mais seu valor. Vamos alterar as funções para que isto ocorra.
int main() {
int t = 10;
valor(&t);
return 0;
}
void valor(int* a)
{
*a = 5;
}
1
2
3
4
5
Vamos novamente analisar a execução
passo a passo.
Passagem por referência
Vamos então agora, tentar utilizar a passagem por referência. Referência para nós é o
mesmo que endereço. Vamos então agora, passar o endereço de t para função e não
mais seu valor. Vamos alterar as funções para que isto ocorra.
int main() {
int t = 10;
valor(&t);
return 0;
}
void valor(int* a)
{
*a = 5;
}
1
2
3
4
5
Passo 1
10
t
&43jjuiop
Passagem por referência
Vamos então agora, tentar utilizar a passagem por referência. Referência para nós é o
mesmo que endereço. Vamos então agora, passar o endereço de t para função e não
mais seu valor. Vamos alterar as funções para que isto ocorra.
int main() {
int t = 10;
valor(&t);
return 0;
}
void valor(int* a)
{
*a = 5;
}
1
2
3
4
5
Passo 2
10
t
&43jjuiop
Passo 2: a execução na main é
interrompida e a função é
chamada. Agora, a caixinha que
está sendo mandada para a
função possui o endereço de t e
não mais o seu valor.
&43jjuiop
Passagem por referência
Vamos então agora, tentar utilizar a passagem por referência. Referência para nós é o
mesmo que endereço. Vamos então agora, passar o endereço de t para função e não
mais seu valor. Vamos alterar as funções para que isto ocorra.
int main() {
int t = 10;
valor(&t);
return 0;
}
void valor(int* a)
{
*a = 5;
}
1
2
3
4
5
10
t
&43jjuiop
Passo 3: a variável a é criada. Note
que ela é um ponteiro e não
poderia ser diferente, pois
passamos para a função um
endereço e relembrando: variáveis
que recebem endereços são
ponteiros! Desta forma a aponta
para t!
&43jjuiop
a
&4558899
Passagem por referência
Vamos então agora, tentar utilizar a passagem por referência. Referência para nós é o
mesmo que endereço. Vamos então agora, passar o endereço de t para função e não
mais seu valor. Vamos alterar as funções para que isto ocorra.
int main() {
int t = 10;
valor(&t);
return 0;
}
void valor(int* a)
{
*a = 5;
}
1
2
3
4
5
10
t
&43jjuiop
Passo 4: o operador de acesso é
utilizado para alterar o conteúdo
da variável para qual a aponta.
Neste caso então o valor da
variável t será alterado de 10 para
5.
&43jjuiop
a
&4558899
5
Passagem por referência
Vamos então agora, tentar utilizar a passagem por referência. Referência para nós é o
mesmo que endereço. Vamos então agora, passar o endereço de t para função e não
mais seu valor. Vamos alterar as funções para que isto ocorra.
int main() {
int t = 10;
valor(&t);
return 0;
}
void valor(int* a)
{
*a = 5;
}
1
2
3
4
5
5
t
&43jjuiop
Passo 5: a função termina e a
execução, todas as suas variáveis
são destruídas, a execução na
main é continuada e o programa
então se encerra.
Passagem por referência
O que aconteceu com a variável t? Teve seu valor alterado, mesmo não estando
dentro da função. Isso só foi possível, porque passamos uma referência (endereço) de
t para a função e quando passamos uma referência, podemos utilizar o operador de
acesso para acessar ou alterar o valor da variável onde quer que ela esteja, pois
temos um link com a mesma.
int main() {
int t = 10;
valor(&t);
return 0;
}
void valor(int* a)
{
*a = 5;
}
5
t
&43jjuiop
Passagem por referência
É claro que este foi um exemplo muito simples e parece inútil
esta função para nós por agora. Porém, quando entrarmos em
TAD, ficará claro como, utilizar a passagem por referência
utilizando ponteiros, diminuirá a complexidade de nossas
funções e evitará que a todo momento tenhamos que fazer re-
atribuições de variáveis, o que pode tornar o código ineficiente
e time-costing.

Más contenido relacionado

La actualidad más candente

Algoritmos e lp parte3-pseudocódigo
Algoritmos e lp parte3-pseudocódigoAlgoritmos e lp parte3-pseudocódigo
Algoritmos e lp parte3-pseudocódigoMauro Pereira
 
Edpuzzle: guia para professores
Edpuzzle:  guia para professoresEdpuzzle:  guia para professores
Edpuzzle: guia para professoresCarlos Pinheiro
 
Relatório de Reflexão Crítica - Vera Oliveira
Relatório de Reflexão Crítica - Vera OliveiraRelatório de Reflexão Crítica - Vera Oliveira
Relatório de Reflexão Crítica - Vera OliveiraVera Oliveira
 
Apresentação do relatorio de estagio
Apresentação do relatorio de estagioApresentação do relatorio de estagio
Apresentação do relatorio de estagioMiguel Farinha
 
Relat reflex crítica - acacio duarte - Integração de Ferramentas Digitais no ...
Relat reflex crítica - acacio duarte - Integração de Ferramentas Digitais no ...Relat reflex crítica - acacio duarte - Integração de Ferramentas Digitais no ...
Relat reflex crítica - acacio duarte - Integração de Ferramentas Digitais no ...Acácio Duarte
 
Relatór reflexcrític.sandramarques
Relatór reflexcrític.sandramarquesRelatór reflexcrític.sandramarques
Relatór reflexcrític.sandramarquesSandra Marques
 
Segurança da informação
Segurança da informaçãoSegurança da informação
Segurança da informaçãoimsp2000
 
Seminário Segurança da Informação
Seminário Segurança da InformaçãoSeminário Segurança da Informação
Seminário Segurança da InformaçãoFelipe Morais
 
Algoritmos - Formas de Representação de Algoritmos
Algoritmos - Formas de Representação de AlgoritmosAlgoritmos - Formas de Representação de Algoritmos
Algoritmos - Formas de Representação de AlgoritmosElaine Cecília Gatto
 
As novas tecnologias aplicadas à educação
As novas tecnologias aplicadas à educaçãoAs novas tecnologias aplicadas à educação
As novas tecnologias aplicadas à educaçãogeorginalopes
 
Disciplina de TIC: Importância da Avaliação diagnóstica
Disciplina de TIC: Importância da Avaliação diagnósticaDisciplina de TIC: Importância da Avaliação diagnóstica
Disciplina de TIC: Importância da Avaliação diagnósticaFernanda Ledesma
 
Introdução a Linguagem de Programação C
Introdução a Linguagem de Programação CIntrodução a Linguagem de Programação C
Introdução a Linguagem de Programação CGercélia Ramos
 
Dados, Informação e Conhecimento
Dados, Informação e ConhecimentoDados, Informação e Conhecimento
Dados, Informação e ConhecimentoRobson Santos
 
Estrutura de Dados e Algoritmos com Java #02-12: Vetores e Arrays
Estrutura de Dados e Algoritmos com Java #02-12: Vetores e ArraysEstrutura de Dados e Algoritmos com Java #02-12: Vetores e Arrays
Estrutura de Dados e Algoritmos com Java #02-12: Vetores e ArraysLoiane Groner
 
Tecnologia e o seu uso na educação
Tecnologia e o seu uso na educação  Tecnologia e o seu uso na educação
Tecnologia e o seu uso na educação Luana Winner
 
Trabalho de Paradigmas Da Linguagem De Programação - Python
Trabalho de Paradigmas Da Linguagem De Programação - PythonTrabalho de Paradigmas Da Linguagem De Programação - Python
Trabalho de Paradigmas Da Linguagem De Programação - PythonJanderson Campêlo
 

La actualidad más candente (20)

Python - Introdução
Python - IntroduçãoPython - Introdução
Python - Introdução
 
Algoritmos e lp parte3-pseudocódigo
Algoritmos e lp parte3-pseudocódigoAlgoritmos e lp parte3-pseudocódigo
Algoritmos e lp parte3-pseudocódigo
 
Medidas estatísticas
Medidas estatísticasMedidas estatísticas
Medidas estatísticas
 
Edpuzzle: guia para professores
Edpuzzle:  guia para professoresEdpuzzle:  guia para professores
Edpuzzle: guia para professores
 
Relatório de Reflexão Crítica - Vera Oliveira
Relatório de Reflexão Crítica - Vera OliveiraRelatório de Reflexão Crítica - Vera Oliveira
Relatório de Reflexão Crítica - Vera Oliveira
 
Apresentação do relatorio de estagio
Apresentação do relatorio de estagioApresentação do relatorio de estagio
Apresentação do relatorio de estagio
 
Relat reflex crítica - acacio duarte - Integração de Ferramentas Digitais no ...
Relat reflex crítica - acacio duarte - Integração de Ferramentas Digitais no ...Relat reflex crítica - acacio duarte - Integração de Ferramentas Digitais no ...
Relat reflex crítica - acacio duarte - Integração de Ferramentas Digitais no ...
 
Relatór reflexcrític.sandramarques
Relatór reflexcrític.sandramarquesRelatór reflexcrític.sandramarques
Relatór reflexcrític.sandramarques
 
Segurança da informação
Segurança da informaçãoSegurança da informação
Segurança da informação
 
Seminário Segurança da Informação
Seminário Segurança da InformaçãoSeminário Segurança da Informação
Seminário Segurança da Informação
 
Algoritmos - Formas de Representação de Algoritmos
Algoritmos - Formas de Representação de AlgoritmosAlgoritmos - Formas de Representação de Algoritmos
Algoritmos - Formas de Representação de Algoritmos
 
Python 02
Python 02Python 02
Python 02
 
As novas tecnologias aplicadas à educação
As novas tecnologias aplicadas à educaçãoAs novas tecnologias aplicadas à educação
As novas tecnologias aplicadas à educação
 
Disciplina de TIC: Importância da Avaliação diagnóstica
Disciplina de TIC: Importância da Avaliação diagnósticaDisciplina de TIC: Importância da Avaliação diagnóstica
Disciplina de TIC: Importância da Avaliação diagnóstica
 
Introdução a Linguagem de Programação C
Introdução a Linguagem de Programação CIntrodução a Linguagem de Programação C
Introdução a Linguagem de Programação C
 
Dados, Informação e Conhecimento
Dados, Informação e ConhecimentoDados, Informação e Conhecimento
Dados, Informação e Conhecimento
 
A multiplicação quadriculas
A multiplicação quadriculasA multiplicação quadriculas
A multiplicação quadriculas
 
Estrutura de Dados e Algoritmos com Java #02-12: Vetores e Arrays
Estrutura de Dados e Algoritmos com Java #02-12: Vetores e ArraysEstrutura de Dados e Algoritmos com Java #02-12: Vetores e Arrays
Estrutura de Dados e Algoritmos com Java #02-12: Vetores e Arrays
 
Tecnologia e o seu uso na educação
Tecnologia e o seu uso na educação  Tecnologia e o seu uso na educação
Tecnologia e o seu uso na educação
 
Trabalho de Paradigmas Da Linguagem De Programação - Python
Trabalho de Paradigmas Da Linguagem De Programação - PythonTrabalho de Paradigmas Da Linguagem De Programação - Python
Trabalho de Paradigmas Da Linguagem De Programação - Python
 

Destacado

Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros Karoline Tavares
 
Projetos de algoritmos com implementações em pascal e c (nivio ziviani, 4ed)
Projetos de algoritmos com implementações em pascal e c (nivio ziviani, 4ed)Projetos de algoritmos com implementações em pascal e c (nivio ziviani, 4ed)
Projetos de algoritmos com implementações em pascal e c (nivio ziviani, 4ed)CriatividadeZeroDocs
 
Dual track Agile - Incluindo o PO e UX em seu pipeline de desenvolvimento
Dual track Agile - Incluindo o PO e UX em seu pipeline de desenvolvimentoDual track Agile - Incluindo o PO e UX em seu pipeline de desenvolvimento
Dual track Agile - Incluindo o PO e UX em seu pipeline de desenvolvimentoPablo Silva
 
Start-USP apresentação do sistema
Start-USP apresentação do sistemaStart-USP apresentação do sistema
Start-USP apresentação do sistemaFrancisco Mat
 
Joomla!Day Brasil 2008 - USP - Paulino Michelazzo
Joomla!Day Brasil 2008 - USP - Paulino MichelazzoJoomla!Day Brasil 2008 - USP - Paulino Michelazzo
Joomla!Day Brasil 2008 - USP - Paulino MichelazzoJoomla!Day Brasil
 
Estrutura de Dados - Aula 03
Estrutura de Dados - Aula 03Estrutura de Dados - Aula 03
Estrutura de Dados - Aula 03thomasdacosta
 
Estrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listasEstrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listasAdriano Teixeira de Souza
 
Assembly para pc-25paginas
Assembly para pc-25paginasAssembly para pc-25paginas
Assembly para pc-25paginasMikeNandes
 

Destacado (20)

Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros
 
Structs em C
Structs em CStructs em C
Structs em C
 
Linguagem C 09 Ponteiros
Linguagem C 09 PonteirosLinguagem C 09 Ponteiros
Linguagem C 09 Ponteiros
 
Projetos de algoritmos com implementações em pascal e c (nivio ziviani, 4ed)
Projetos de algoritmos com implementações em pascal e c (nivio ziviani, 4ed)Projetos de algoritmos com implementações em pascal e c (nivio ziviani, 4ed)
Projetos de algoritmos com implementações em pascal e c (nivio ziviani, 4ed)
 
Apostila linguagem pascal
Apostila linguagem pascalApostila linguagem pascal
Apostila linguagem pascal
 
Ponteiros de Função
Ponteiros de FunçãoPonteiros de Função
Ponteiros de Função
 
Pilha em C
Pilha em CPilha em C
Pilha em C
 
Listas em C
Listas em CListas em C
Listas em C
 
Dual track Agile - Incluindo o PO e UX em seu pipeline de desenvolvimento
Dual track Agile - Incluindo o PO e UX em seu pipeline de desenvolvimentoDual track Agile - Incluindo o PO e UX em seu pipeline de desenvolvimento
Dual track Agile - Incluindo o PO e UX em seu pipeline de desenvolvimento
 
Start-USP apresentação do sistema
Start-USP apresentação do sistemaStart-USP apresentação do sistema
Start-USP apresentação do sistema
 
Joomla!Day Brasil 2008 - USP - Paulino Michelazzo
Joomla!Day Brasil 2008 - USP - Paulino MichelazzoJoomla!Day Brasil 2008 - USP - Paulino Michelazzo
Joomla!Day Brasil 2008 - USP - Paulino Michelazzo
 
Estrutura de Dados - Aula 03
Estrutura de Dados - Aula 03Estrutura de Dados - Aula 03
Estrutura de Dados - Aula 03
 
Estrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listasEstrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listas
 
Fila de prioridades
Fila de prioridadesFila de prioridades
Fila de prioridades
 
Pilhas e Filas
Pilhas e FilasPilhas e Filas
Pilhas e Filas
 
Estrutura de dados - Filas
Estrutura de dados - FilasEstrutura de dados - Filas
Estrutura de dados - Filas
 
Acesse E-books no acervo da USP
Acesse E-books no acervo da USPAcesse E-books no acervo da USP
Acesse E-books no acervo da USP
 
Estrutura de dados - Pilhas
Estrutura de dados - PilhasEstrutura de dados - Pilhas
Estrutura de dados - Pilhas
 
Estruturas de dados
Estruturas de dadosEstruturas de dados
Estruturas de dados
 
Assembly para pc-25paginas
Assembly para pc-25paginasAssembly para pc-25paginas
Assembly para pc-25paginas
 

Similar a Revisão sobre ponteiros em C

Similar a Revisão sobre ponteiros em C (20)

Aula 6 pc - slides
Aula 6   pc - slidesAula 6   pc - slides
Aula 6 pc - slides
 
Ponteiros e Alocação Dinâmica
Ponteiros e Alocação DinâmicaPonteiros e Alocação Dinâmica
Ponteiros e Alocação Dinâmica
 
Curso Básico de Java - Aula 10
Curso Básico de Java - Aula 10Curso Básico de Java - Aula 10
Curso Básico de Java - Aula 10
 
PHP - Funções
PHP - FunçõesPHP - Funções
PHP - Funções
 
Ed1
Ed1Ed1
Ed1
 
Introdução à programação funcional
Introdução à programação funcionalIntrodução à programação funcional
Introdução à programação funcional
 
aula intro de Python sobre Funcoes.pdf
aula intro de  Python sobre  Funcoes.pdfaula intro de  Python sobre  Funcoes.pdf
aula intro de Python sobre Funcoes.pdf
 
RevisãoCompactaFuncoesPonteiro.pptx
RevisãoCompactaFuncoesPonteiro.pptxRevisãoCompactaFuncoesPonteiro.pptx
RevisãoCompactaFuncoesPonteiro.pptx
 
02 controle de fluxo
02   controle de fluxo02   controle de fluxo
02 controle de fluxo
 
Programação Estruturada 2 - Aula 05
Programação Estruturada 2 - Aula 05Programação Estruturada 2 - Aula 05
Programação Estruturada 2 - Aula 05
 
Laboratório de Programação II: Uso do ponteiro void *
Laboratório de Programação II: Uso do ponteiro void *Laboratório de Programação II: Uso do ponteiro void *
Laboratório de Programação II: Uso do ponteiro void *
 
Resumo tipo primitivo_java
Resumo tipo primitivo_javaResumo tipo primitivo_java
Resumo tipo primitivo_java
 
Funções em C
Funções em CFunções em C
Funções em C
 
Conceitos de ponteiros struct e buffers
Conceitos de ponteiros struct e buffersConceitos de ponteiros struct e buffers
Conceitos de ponteiros struct e buffers
 
Java - Aula 08
Java - Aula 08Java - Aula 08
Java - Aula 08
 
Java
JavaJava
Java
 
Apostila de Alocação Dinâmica em C
Apostila de Alocação Dinâmica em CApostila de Alocação Dinâmica em C
Apostila de Alocação Dinâmica em C
 
Ud3
Ud3Ud3
Ud3
 
document.onl_manual-psi-m5.pdf
document.onl_manual-psi-m5.pdfdocument.onl_manual-psi-m5.pdf
document.onl_manual-psi-m5.pdf
 
Subalgoritmos Profª Letíca Lopes
Subalgoritmos Profª Letíca LopesSubalgoritmos Profª Letíca Lopes
Subalgoritmos Profª Letíca Lopes
 

Más de Pablo Silva

Agilidade, times e outras coisas mais
Agilidade, times e outras coisas maisAgilidade, times e outras coisas mais
Agilidade, times e outras coisas maisPablo Silva
 
Times de produto de alta performance
Times de produto de alta performanceTimes de produto de alta performance
Times de produto de alta performancePablo Silva
 
Times de produto de alta performance
Times de produto de alta performanceTimes de produto de alta performance
Times de produto de alta performancePablo Silva
 
Transformação Digital: Criando uma empresa financeiramente estratégica para o...
Transformação Digital: Criando uma empresa financeiramente estratégica para o...Transformação Digital: Criando uma empresa financeiramente estratégica para o...
Transformação Digital: Criando uma empresa financeiramente estratégica para o...Pablo Silva
 
OKR is the new black: porque esse framework está tão na moda?
OKR is the new black: porque esse framework está tão na moda?OKR is the new black: porque esse framework está tão na moda?
OKR is the new black: porque esse framework está tão na moda?Pablo Silva
 
Transformando times de desenvolvimento mercenários em times de produto missio...
Transformando times de desenvolvimento mercenários em times de produto missio...Transformando times de desenvolvimento mercenários em times de produto missio...
Transformando times de desenvolvimento mercenários em times de produto missio...Pablo Silva
 
As próximas ondas da tecnologia
As próximas ondas da tecnologiaAs próximas ondas da tecnologia
As próximas ondas da tecnologiaPablo Silva
 
Carreira Dev: dicas pra você que vai chegar na semana que vem
Carreira Dev: dicas pra você que vai chegar na semana que vemCarreira Dev: dicas pra você que vai chegar na semana que vem
Carreira Dev: dicas pra você que vai chegar na semana que vemPablo Silva
 
Dual Track Agile - A integração da tecnologia, experiência do usuário e negócio
Dual Track Agile - A integração da tecnologia, experiência do usuário e negócio Dual Track Agile - A integração da tecnologia, experiência do usuário e negócio
Dual Track Agile - A integração da tecnologia, experiência do usuário e negócio Pablo Silva
 
Lets talk about OKRs
Lets talk about OKRsLets talk about OKRs
Lets talk about OKRsPablo Silva
 
2 anos usando OKRs: adeus achismo-driven
2 anos usando OKRs: adeus achismo-driven2 anos usando OKRs: adeus achismo-driven
2 anos usando OKRs: adeus achismo-drivenPablo Silva
 
Ágil nao é mais tendência, é sobrevivência!
Ágil nao é mais tendência, é sobrevivência!Ágil nao é mais tendência, é sobrevivência!
Ágil nao é mais tendência, é sobrevivência!Pablo Silva
 
Dual Track Agile - PO, UX e Marketing no seu pipelane de desenvolvimento de p...
Dual Track Agile - PO, UX e Marketing no seu pipelane de desenvolvimento de p...Dual Track Agile - PO, UX e Marketing no seu pipelane de desenvolvimento de p...
Dual Track Agile - PO, UX e Marketing no seu pipelane de desenvolvimento de p...Pablo Silva
 
Nem só de codigo vive homem (Management version)
Nem só de codigo vive homem (Management version)Nem só de codigo vive homem (Management version)
Nem só de codigo vive homem (Management version)Pablo Silva
 
Nem só de código vive o homem (Versão para desenvolvedores)
Nem só de código vive o homem (Versão para desenvolvedores)Nem só de código vive o homem (Versão para desenvolvedores)
Nem só de código vive o homem (Versão para desenvolvedores)Pablo Silva
 
Relações de recorrência
Relações de recorrênciaRelações de recorrência
Relações de recorrênciaPablo Silva
 
Análise da complexidade de algoritmos
Análise da complexidade de algoritmosAnálise da complexidade de algoritmos
Análise da complexidade de algoritmosPablo Silva
 
Análise assintótica
Análise assintóticaAnálise assintótica
Análise assintóticaPablo Silva
 
Conceitos básicos de AEDS
Conceitos básicos de AEDSConceitos básicos de AEDS
Conceitos básicos de AEDSPablo Silva
 

Más de Pablo Silva (20)

Agilidade, times e outras coisas mais
Agilidade, times e outras coisas maisAgilidade, times e outras coisas mais
Agilidade, times e outras coisas mais
 
Times de produto de alta performance
Times de produto de alta performanceTimes de produto de alta performance
Times de produto de alta performance
 
Times de produto de alta performance
Times de produto de alta performanceTimes de produto de alta performance
Times de produto de alta performance
 
Transformação Digital: Criando uma empresa financeiramente estratégica para o...
Transformação Digital: Criando uma empresa financeiramente estratégica para o...Transformação Digital: Criando uma empresa financeiramente estratégica para o...
Transformação Digital: Criando uma empresa financeiramente estratégica para o...
 
OKR is the new black: porque esse framework está tão na moda?
OKR is the new black: porque esse framework está tão na moda?OKR is the new black: porque esse framework está tão na moda?
OKR is the new black: porque esse framework está tão na moda?
 
Transformando times de desenvolvimento mercenários em times de produto missio...
Transformando times de desenvolvimento mercenários em times de produto missio...Transformando times de desenvolvimento mercenários em times de produto missio...
Transformando times de desenvolvimento mercenários em times de produto missio...
 
As próximas ondas da tecnologia
As próximas ondas da tecnologiaAs próximas ondas da tecnologia
As próximas ondas da tecnologia
 
Carreira Dev: dicas pra você que vai chegar na semana que vem
Carreira Dev: dicas pra você que vai chegar na semana que vemCarreira Dev: dicas pra você que vai chegar na semana que vem
Carreira Dev: dicas pra você que vai chegar na semana que vem
 
Dual Track Agile - A integração da tecnologia, experiência do usuário e negócio
Dual Track Agile - A integração da tecnologia, experiência do usuário e negócio Dual Track Agile - A integração da tecnologia, experiência do usuário e negócio
Dual Track Agile - A integração da tecnologia, experiência do usuário e negócio
 
Lets talk about OKRs
Lets talk about OKRsLets talk about OKRs
Lets talk about OKRs
 
2 anos usando OKRs: adeus achismo-driven
2 anos usando OKRs: adeus achismo-driven2 anos usando OKRs: adeus achismo-driven
2 anos usando OKRs: adeus achismo-driven
 
Ágil nao é mais tendência, é sobrevivência!
Ágil nao é mais tendência, é sobrevivência!Ágil nao é mais tendência, é sobrevivência!
Ágil nao é mais tendência, é sobrevivência!
 
Dual Track Agile - PO, UX e Marketing no seu pipelane de desenvolvimento de p...
Dual Track Agile - PO, UX e Marketing no seu pipelane de desenvolvimento de p...Dual Track Agile - PO, UX e Marketing no seu pipelane de desenvolvimento de p...
Dual Track Agile - PO, UX e Marketing no seu pipelane de desenvolvimento de p...
 
Nem só de codigo vive homem (Management version)
Nem só de codigo vive homem (Management version)Nem só de codigo vive homem (Management version)
Nem só de codigo vive homem (Management version)
 
Nem só de código vive o homem (Versão para desenvolvedores)
Nem só de código vive o homem (Versão para desenvolvedores)Nem só de código vive o homem (Versão para desenvolvedores)
Nem só de código vive o homem (Versão para desenvolvedores)
 
Relações de recorrência
Relações de recorrênciaRelações de recorrência
Relações de recorrência
 
Recursividade
RecursividadeRecursividade
Recursividade
 
Análise da complexidade de algoritmos
Análise da complexidade de algoritmosAnálise da complexidade de algoritmos
Análise da complexidade de algoritmos
 
Análise assintótica
Análise assintóticaAnálise assintótica
Análise assintótica
 
Conceitos básicos de AEDS
Conceitos básicos de AEDSConceitos básicos de AEDS
Conceitos básicos de AEDS
 

Último

Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdfProjeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdfHELENO FAVACHO
 
Pesquisa Ação René Barbier Livro acadêmico
Pesquisa Ação René Barbier Livro  acadêmicoPesquisa Ação René Barbier Livro  acadêmico
Pesquisa Ação René Barbier Livro acadêmicolourivalcaburite
 
Produção de Texto - 5º ano - CRÔNICA.pptx
Produção de Texto - 5º ano - CRÔNICA.pptxProdução de Texto - 5º ano - CRÔNICA.pptx
Produção de Texto - 5º ano - CRÔNICA.pptxLeonardoGabriel65
 
Cartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptxCartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptxMarcosLemes28
 
A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...
A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...
A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...DirceuNascimento5
 
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptxResponde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptxAntonioVieira539017
 
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptxSlides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptxLuizHenriquedeAlmeid6
 
Plano de aula Nova Escola períodos simples e composto parte 1.pptx
Plano de aula Nova Escola períodos simples e composto parte 1.pptxPlano de aula Nova Escola períodos simples e composto parte 1.pptx
Plano de aula Nova Escola períodos simples e composto parte 1.pptxPaulaYaraDaasPedro
 
O que é arte. Definição de arte. História da arte.
O que é arte. Definição de arte. História da arte.O que é arte. Definição de arte. História da arte.
O que é arte. Definição de arte. História da arte.denisecompasso2
 
EDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVA
EDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVAEDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVA
EDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVAssuser2ad38b
 
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...MariaCristinaSouzaLe1
 
Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...
Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...
Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...marcelafinkler
 
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMPRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMHELENO FAVACHO
 
TCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdf
TCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdfTCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdf
TCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdfamarianegodoi
 
Conflitos entre: ISRAEL E PALESTINA.pdf
Conflitos entre:  ISRAEL E PALESTINA.pdfConflitos entre:  ISRAEL E PALESTINA.pdf
Conflitos entre: ISRAEL E PALESTINA.pdfjacquescardosodias
 
Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxTailsonSantos1
 
Texto dramático com Estrutura e exemplos.ppt
Texto dramático com Estrutura e exemplos.pptTexto dramático com Estrutura e exemplos.ppt
Texto dramático com Estrutura e exemplos.pptjricardo76
 
8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeito8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeitotatianehilda
 
6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptxJssicaCassiano2
 
Seminário Biologia e desenvolvimento da matrinxa.pptx
Seminário Biologia e desenvolvimento da matrinxa.pptxSeminário Biologia e desenvolvimento da matrinxa.pptx
Seminário Biologia e desenvolvimento da matrinxa.pptxReinaldoMuller1
 

Último (20)

Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdfProjeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
 
Pesquisa Ação René Barbier Livro acadêmico
Pesquisa Ação René Barbier Livro  acadêmicoPesquisa Ação René Barbier Livro  acadêmico
Pesquisa Ação René Barbier Livro acadêmico
 
Produção de Texto - 5º ano - CRÔNICA.pptx
Produção de Texto - 5º ano - CRÔNICA.pptxProdução de Texto - 5º ano - CRÔNICA.pptx
Produção de Texto - 5º ano - CRÔNICA.pptx
 
Cartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptxCartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptx
 
A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...
A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...
A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...
 
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptxResponde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
 
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptxSlides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
 
Plano de aula Nova Escola períodos simples e composto parte 1.pptx
Plano de aula Nova Escola períodos simples e composto parte 1.pptxPlano de aula Nova Escola períodos simples e composto parte 1.pptx
Plano de aula Nova Escola períodos simples e composto parte 1.pptx
 
O que é arte. Definição de arte. História da arte.
O que é arte. Definição de arte. História da arte.O que é arte. Definição de arte. História da arte.
O que é arte. Definição de arte. História da arte.
 
EDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVA
EDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVAEDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVA
EDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVA
 
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
 
Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...
Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...
Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...
 
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMPRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
 
TCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdf
TCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdfTCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdf
TCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdf
 
Conflitos entre: ISRAEL E PALESTINA.pdf
Conflitos entre:  ISRAEL E PALESTINA.pdfConflitos entre:  ISRAEL E PALESTINA.pdf
Conflitos entre: ISRAEL E PALESTINA.pdf
 
Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptx
 
Texto dramático com Estrutura e exemplos.ppt
Texto dramático com Estrutura e exemplos.pptTexto dramático com Estrutura e exemplos.ppt
Texto dramático com Estrutura e exemplos.ppt
 
8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeito8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeito
 
6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx
 
Seminário Biologia e desenvolvimento da matrinxa.pptx
Seminário Biologia e desenvolvimento da matrinxa.pptxSeminário Biologia e desenvolvimento da matrinxa.pptx
Seminário Biologia e desenvolvimento da matrinxa.pptx
 

Revisão sobre ponteiros em C

  • 2. Revisão Nesta revisão, iremos relembrar os conceitos importantes de ponteiros e aplicá-los para entender o que é passagem de parâmetros por referência para uma função e como ela se diferencia da passagem por valor.
  • 3. Ponteiros? - Ponteiros são tipos de variáveis que recebem endereços. - Esses endereços são os lugares da memória onde estão armazenados valores de variáveis. - O nome ponteiro é uma analogia, referindo que esse tipo de variável “aponta”para um endereço de memória.
  • 4. Estrutura de um ponteiro int * pont; Tipo do ponteiro: como dito o ponteiro é uma variável, logo precisa de um tipo. Este tipo, indica o tipo de valor que está armazendo no endereço associado com este ponteiro, ou em outras palavras, qual o tipo de dado que o espaço de memória aceita. Operador asterisco: o que diferencia ponteiros das outras variáveis é o operador asterisco. Nome do ponteiro: segue as mesmas regras de nomeação de variáveis.
  • 5. Usando um ponteiro Vamos ver como é a estrutura de uma função int main() { int a = 10; int* p = &a; return 0; } Tipos compatíveis: note que o tipo de endereço que estamos passando para o ponteiro é int, uma vez que nosso ponteiro é do tipo inteiro. Se no lugar de a fosse atribuído um caracter por exemplo (char b), o programa não compilaria, pois estaríamos lidando com tipos incompatíveis. Operador endereço: Uma vez que um ponteiro recebe um endereço de uma variável, foi preciso definir um operador que extraísse esse endereço. O operador que faz isso é o operador de endereço. &a significa “O endereço da variável a”.
  • 6. Desenhos para analogia A partir de agora, vamos pensar em variáveis como “caixinhas” que recebem valores dentro delas. Exemplo: int main() { int a = 10; return 0; } A representação destas variáveis ficariam assim: 10 a &43jjuiop a é o nome da caixa. 8 dígitos seguidos do símbolo de endereço, é o endereço desta caixa, chamado também de referência. Valor da caixa Um fato importante aqui: variáveis comuns só recebem valores (int, char, float...). Uma caixa que representa uma variável comum nunca receberá um endereço como seu valor (apesar de que toda caixa possui um endereço de memória)
  • 7. Desenhos para analogia A partir de agora, vamos pensar em variáveis como “caixinhas” que recebem valores dentro delas. Exemplo: int main() { int a = 10; int* p = &a; return 0; } A representação da caixa de um ponteiro: &43jjuiop p &98sd66dd p é o nome da caixa. Por ser uma variável, um ponteiro também precisa ser armazenada na memória e por isso tem um endereço de caixa. Um fato importante aqui: variáveis ponteiros recebem somente endereços e não valores! O conteúdo de um ponteiro nunca será um int, char, etc. mas sim um endereço de um tipo. Para este caso, o endereço é do tipo inteiro (variável a é do tipo inteiro). Endereço de a (valor que o ponteiro recebeu)
  • 8. Desenhos para analogia Uma possível representação da relação entre ponteiro e varíavel para qual ele aponta seria: int main() { int a = 10; int* p = &a; return 0; } &43jjuiop p &98sd66dd 10 a &43jjuiop O ponteiro aponta para a caixa de a, porque o endereço de a foi passado para ele. Uma característica do ponteiro importantíssima é que por apontar para a caixa de a, ele tem acesso ao seu valor (10) e pode alterá- lo a qualquer momento!
  • 9. Características e funções de um ponteiro Como dito, um ponteiro tem acesso ao valor da variável para qual ele aponta. Vamos ver como alterar esse valor através do ponteiro. int main() { int a = 10; int* p = &a; *p = 5; return 0; } 10 a &43jjuiop 1 2 3 Passo 1: Variável a é criada.
  • 10. Características e funções de um ponteiro Como dito, um ponteiro tem acesso ao valor da variável para qual ele aponta. Vamos ver como alterar esse valor através do ponteiro. int main() { int a = 10; int* p = &a; *p = 5; return 0; } &43jjuiop p &98sd66dd 10 a &43jjuiop 1 2 3 Passo 2: O ponteiro p é criado e o endereço de a é atribuído à ele. Portanto p aponta para a.
  • 11. Características e funções de um ponteiro Como dito, um ponteiro tem acesso ao valor da variável para qual ele aponta. Vamos ver como alterar esse valor através do ponteiro. int main() { int a = 10; int* p = &a; *p = 5; return 0; } &43jjuiop p &98sd66dd 10 a &43jjuiop 1 2 3 Passo 3: O conteúdo de a é acessado e alterado utilizando o operador de acesso do ponteiro. O conjunto *(nome_do_ponteiro) é o operador de acesso ao conteúdo da variável para qual o ponteiro aponta. Ao utilizarmos este operador, é possível alterar o valor da variável para o ponteiro aponta ou somente acessá-lo. 5
  • 12. Passagem por referência O exemplo anterior é somente uma demonstração. Utilizar um ponteiro para alterar o valor da variável neste caso não seria necessário, pois todo nosso programa está na main e conseguimos acessar esta variável a qualquer momento. Este fato muda, quando estamos trabalhando com funções. Lembre-se que as variáveis dentro do escopo de uma função, podem ser acessadas somente lá dentro. Portanto, se quisermos alterar o valor de uma variável que está na main dentro de uma função, a única maneira seria fazer esta função retornar o valor e atribuirmos este valor a variável para qual queremos alterar o valor. Vamos ver um exemplo.
  • 13. Passagem por valor Suponha que queremos alterar o valor de t utilizando uma função e sem utilizar ponteiros. Teríamos que fazer algo do tipo: int main() { int t = 10; t = valor(5); return 0; } int valor(int a) { a = 5; return a; } O que acontece nesse caso é que t tinha 10 quando foi criado. Chamamos então a função valor com o novo valor que queremos para t (5) e atribuímos a chamada desta função para a variável t. Neste caso, quando o programa terminar t terá 5, que é o retorno função valor.
  • 14. Passagem por valor Lembrando, isto é só um exemplo, sem muita utilidade somente para entendermos os conceitos de passagem por valor e referência. int main() { int t = 10; t = valor(5); return 0; } int valor(int a) { a = 5; return a; } Neste caso o que estamos fazendo, é passando um valor para função (para este exemplo o valor foi 5, mas poderia ter sido qualquer valor de inteiro). Tivemos que atribuir o valor de retorno para t, justamente porque a passagem de parâmetros para a função, foi feita através da passagem por valor. Quando utilizamos esta abordagem, tudo que acontece na função, tem alteração somente dentro dela e quando ela acaba, todos os valores gerados lá são destruídos e o que sobra é somente um retorno.
  • 15. Passagem por valor Vamos analisar um outro exemplo de passagem por valor. Vamos ver o que acontece quando tentamos alterar o valor de uma varíavel através de uma função que não tem retorno e utilizamos passagem por valor. int main() { int t = 10; valor(t); return 0; } void valor(int a) { a = 5; } 1 2 3 4 5 Vamos ver a execução passo a passo.
  • 16. Passagem por valor Vamos analisar um outro exemplo de passagem por valor. Vamos ver o que acontece quando tentamos alterar o valor de uma varíavel através de uma função que não tem retorno e utilizamos passagem por valor. int main() { int t = 10; valor(t); return 0; } void valor(int a) { a = 5; } 1 2 3 4 5 Passo 1 10 t &43jjuiop
  • 17. Passagem por valor Vamos analisar um outro exemplo de passagem por valor. Vamos ver o que acontece quando tentamos alterar o valor de uma varíavel através de uma função que não tem retorno e utilizamos passagem por valor. int main() { int t = 10; valor(t); return 0; } void valor(int a) { a = 5; } 1 2 3 4 5 Passo 2: a execução na main é interrompida e a função é chamada. O valor de t é enviado para a função. 10 t &43jjuiop 10
  • 18. Passagem por valor Vamos analisar um outro exemplo de passagem por valor. Vamos ver o que acontece quando tentamos alterar o valor de uma varíavel através de uma função que não tem retorno e utilizamos passagem por valor. int main() { int t = 10; valor(t); return 0; } void valor(int a) { a = 5; } 1 2 3 4 5 Passo 3: a variável que representa o parâmetro da função é criada. Note que o endereço de a é diferente do endereço de t. 10 t &43jjuiop 10 10 a &456699oo
  • 19. Passagem por valor Vamos analisar um outro exemplo de passagem por valor. Vamos ver o que acontece quando tentamos alterar o valor de uma varíavel através de uma função que não tem retorno e utilizamos passagem por valor. int main() { int t = 10; valor(t); return 0; } void valor(int a) { a = 5; } 1 2 3 4 5 Passo 4: a variável a tem seu valor alterado para 5. 10 t &43jjuiop 10 a &456699oo 5
  • 20. Passagem por valor Vamos analisar um outro exemplo de passagem por valor. Vamos ver o que acontece quando tentamos alterar o valor de uma varíavel através de uma função que não tem retorno e utilizamos passagem por valor. int main() { int t = 10; valor(t); return 0; } void valor(int a) { a = 5; } 1 2 3 4 5 Passo 5: a função termina e a execução na main é recomeçada e o programa se encerra. Neste momento nada que foi feito na função existe mais por que ela acabou. 10 t &43jjuiop
  • 21. Passagem por valor O que aconteceu com a variável t que estava na main? NADA. Não tivemos sucesso em alterar seu valor desta vez, porque o que passamos para função foi somente o valor de t, que não tem nenhuma referência com a variável. int main() { int t = 10; valor(t); return 0; } void valor(int a) { a = 5; } 1 2 3 4 5 10 t &43jjuiop
  • 22. Passagem por referência Vamos então agora, tentar utilizar a passagem por referência. Referência para nós é o mesmo que endereço. Vamos então agora, passar o endereço de t para função e não mais seu valor. Vamos alterar as funções para que isto ocorra. int main() { int t = 10; valor(&t); return 0; } void valor(int* a) { *a = 5; } 1 2 3 4 5 Vamos novamente analisar a execução passo a passo.
  • 23. Passagem por referência Vamos então agora, tentar utilizar a passagem por referência. Referência para nós é o mesmo que endereço. Vamos então agora, passar o endereço de t para função e não mais seu valor. Vamos alterar as funções para que isto ocorra. int main() { int t = 10; valor(&t); return 0; } void valor(int* a) { *a = 5; } 1 2 3 4 5 Passo 1 10 t &43jjuiop
  • 24. Passagem por referência Vamos então agora, tentar utilizar a passagem por referência. Referência para nós é o mesmo que endereço. Vamos então agora, passar o endereço de t para função e não mais seu valor. Vamos alterar as funções para que isto ocorra. int main() { int t = 10; valor(&t); return 0; } void valor(int* a) { *a = 5; } 1 2 3 4 5 Passo 2 10 t &43jjuiop Passo 2: a execução na main é interrompida e a função é chamada. Agora, a caixinha que está sendo mandada para a função possui o endereço de t e não mais o seu valor. &43jjuiop
  • 25. Passagem por referência Vamos então agora, tentar utilizar a passagem por referência. Referência para nós é o mesmo que endereço. Vamos então agora, passar o endereço de t para função e não mais seu valor. Vamos alterar as funções para que isto ocorra. int main() { int t = 10; valor(&t); return 0; } void valor(int* a) { *a = 5; } 1 2 3 4 5 10 t &43jjuiop Passo 3: a variável a é criada. Note que ela é um ponteiro e não poderia ser diferente, pois passamos para a função um endereço e relembrando: variáveis que recebem endereços são ponteiros! Desta forma a aponta para t! &43jjuiop a &4558899
  • 26. Passagem por referência Vamos então agora, tentar utilizar a passagem por referência. Referência para nós é o mesmo que endereço. Vamos então agora, passar o endereço de t para função e não mais seu valor. Vamos alterar as funções para que isto ocorra. int main() { int t = 10; valor(&t); return 0; } void valor(int* a) { *a = 5; } 1 2 3 4 5 10 t &43jjuiop Passo 4: o operador de acesso é utilizado para alterar o conteúdo da variável para qual a aponta. Neste caso então o valor da variável t será alterado de 10 para 5. &43jjuiop a &4558899 5
  • 27. Passagem por referência Vamos então agora, tentar utilizar a passagem por referência. Referência para nós é o mesmo que endereço. Vamos então agora, passar o endereço de t para função e não mais seu valor. Vamos alterar as funções para que isto ocorra. int main() { int t = 10; valor(&t); return 0; } void valor(int* a) { *a = 5; } 1 2 3 4 5 5 t &43jjuiop Passo 5: a função termina e a execução, todas as suas variáveis são destruídas, a execução na main é continuada e o programa então se encerra.
  • 28. Passagem por referência O que aconteceu com a variável t? Teve seu valor alterado, mesmo não estando dentro da função. Isso só foi possível, porque passamos uma referência (endereço) de t para a função e quando passamos uma referência, podemos utilizar o operador de acesso para acessar ou alterar o valor da variável onde quer que ela esteja, pois temos um link com a mesma. int main() { int t = 10; valor(&t); return 0; } void valor(int* a) { *a = 5; } 5 t &43jjuiop
  • 29. Passagem por referência É claro que este foi um exemplo muito simples e parece inútil esta função para nós por agora. Porém, quando entrarmos em TAD, ficará claro como, utilizar a passagem por referência utilizando ponteiros, diminuirá a complexidade de nossas funções e evitará que a todo momento tenhamos que fazer re- atribuições de variáveis, o que pode tornar o código ineficiente e time-costing.