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

Teclado- ESTUDO DAS TECLAS E FUNÇÕES BÁSICAS
Teclado- ESTUDO DAS TECLAS E FUNÇÕES BÁSICASTeclado- ESTUDO DAS TECLAS E FUNÇÕES BÁSICAS
Teclado- ESTUDO DAS TECLAS E FUNÇÕES BÁSICASProfessora Luana
 
Apresentação do Teclado e Mouse
Apresentação do Teclado e MouseApresentação do Teclado e Mouse
Apresentação do Teclado e MouseFraan Bittencourt
 
Informatica parte 4.1-inicio mouse e teclado
Informatica parte 4.1-inicio mouse e tecladoInformatica parte 4.1-inicio mouse e teclado
Informatica parte 4.1-inicio mouse e tecladoMauro Pereira
 
Grupos frásicos e Funções Sintáticas
Grupos frásicos e Funções SintáticasGrupos frásicos e Funções Sintáticas
Grupos frásicos e Funções SintáticasLurdes Augusto
 
Graus dos adjetivos portugues para estrangeiros
Graus dos adjetivos portugues para estrangeirosGraus dos adjetivos portugues para estrangeiros
Graus dos adjetivos portugues para estrangeirosnakabrasil
 
Vamos aprender a usar o mouse
Vamos aprender a usar o mouseVamos aprender a usar o mouse
Vamos aprender a usar o mouseemefetchegoyen
 
Teclas de atalho do word e excel
Teclas de atalho do word e excelTeclas de atalho do word e excel
Teclas de atalho do word e excelFábio Brito
 
Aula 1 introdução à computação para crianças
Aula 1 introdução à computação para criançasAula 1 introdução à computação para crianças
Aula 1 introdução à computação para criançasDorgival Netto
 
Powerpoint - Ficha 1 e 2
Powerpoint - Ficha 1 e 2 Powerpoint - Ficha 1 e 2
Powerpoint - Ficha 1 e 2 filipereira
 
A classe dos adjetivos
A classe dos adjetivosA classe dos adjetivos
A classe dos adjetivosgifamiliar
 
Verbos ficha exercícios 7º ano
Verbos   ficha exercícios 7º anoVerbos   ficha exercícios 7º ano
Verbos ficha exercícios 7º anoAna Tapadinhas
 
A classe dos adjetivos ficha de trabalho - 5º ano
A classe dos adjetivos   ficha de trabalho - 5º anoA classe dos adjetivos   ficha de trabalho - 5º ano
A classe dos adjetivos ficha de trabalho - 5º anoAna Cristina Carvalho
 
Regras da sala de aula: PowerPoint
Regras da sala de aula: PowerPointRegras da sala de aula: PowerPoint
Regras da sala de aula: PowerPointA. Simoes
 
matemática - ficha de trabalho - numerais ordinais
 matemática - ficha de trabalho - numerais ordinais matemática - ficha de trabalho - numerais ordinais
matemática - ficha de trabalho - numerais ordinaisCrescendo EAprendendo
 
Ficha revisão matemática 3º
Ficha revisão matemática 3ºFicha revisão matemática 3º
Ficha revisão matemática 3ºElisabete Matos
 

La actualidad más candente (20)

Teclado- ESTUDO DAS TECLAS E FUNÇÕES BÁSICAS
Teclado- ESTUDO DAS TECLAS E FUNÇÕES BÁSICASTeclado- ESTUDO DAS TECLAS E FUNÇÕES BÁSICAS
Teclado- ESTUDO DAS TECLAS E FUNÇÕES BÁSICAS
 
Teclado
TecladoTeclado
Teclado
 
Apresentação do Teclado e Mouse
Apresentação do Teclado e MouseApresentação do Teclado e Mouse
Apresentação do Teclado e Mouse
 
O papagaio especial
O papagaio especialO papagaio especial
O papagaio especial
 
Informatica parte 4.1-inicio mouse e teclado
Informatica parte 4.1-inicio mouse e tecladoInformatica parte 4.1-inicio mouse e teclado
Informatica parte 4.1-inicio mouse e teclado
 
Grupos frásicos e Funções Sintáticas
Grupos frásicos e Funções SintáticasGrupos frásicos e Funções Sintáticas
Grupos frásicos e Funções Sintáticas
 
Graus dos adjetivos portugues para estrangeiros
Graus dos adjetivos portugues para estrangeirosGraus dos adjetivos portugues para estrangeiros
Graus dos adjetivos portugues para estrangeiros
 
Vamos aprender a usar o mouse
Vamos aprender a usar o mouseVamos aprender a usar o mouse
Vamos aprender a usar o mouse
 
Teclas de atalho
Teclas de atalho Teclas de atalho
Teclas de atalho
 
Teclas de atalho do word e excel
Teclas de atalho do word e excelTeclas de atalho do word e excel
Teclas de atalho do word e excel
 
Aula 1 introdução à computação para crianças
Aula 1 introdução à computação para criançasAula 1 introdução à computação para crianças
Aula 1 introdução à computação para crianças
 
Diminutivo e aumentativo
Diminutivo e aumentativoDiminutivo e aumentativo
Diminutivo e aumentativo
 
Powerpoint - Ficha 1 e 2
Powerpoint - Ficha 1 e 2 Powerpoint - Ficha 1 e 2
Powerpoint - Ficha 1 e 2
 
A classe dos adjetivos
A classe dos adjetivosA classe dos adjetivos
A classe dos adjetivos
 
Verbos ficha exercícios 7º ano
Verbos   ficha exercícios 7º anoVerbos   ficha exercícios 7º ano
Verbos ficha exercícios 7º ano
 
A classe dos adjetivos ficha de trabalho - 5º ano
A classe dos adjetivos   ficha de trabalho - 5º anoA classe dos adjetivos   ficha de trabalho - 5º ano
A classe dos adjetivos ficha de trabalho - 5º ano
 
Tabuada do 3 ficha
Tabuada do 3   fichaTabuada do 3   ficha
Tabuada do 3 ficha
 
Regras da sala de aula: PowerPoint
Regras da sala de aula: PowerPointRegras da sala de aula: PowerPoint
Regras da sala de aula: PowerPoint
 
matemática - ficha de trabalho - numerais ordinais
 matemática - ficha de trabalho - numerais ordinais matemática - ficha de trabalho - numerais ordinais
matemática - ficha de trabalho - numerais ordinais
 
Ficha revisão matemática 3º
Ficha revisão matemática 3ºFicha revisão matemática 3º
Ficha revisão matemática 3º
 

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
 
Linguagem C - Ponteiros
Linguagem C - PonteirosLinguagem C - Ponteiros
Linguagem C - Ponteiros
 
Structs em C
Structs em CStructs em C
Structs em C
 
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
JavaJava
Java
 
Java - Aula 08
Java - Aula 08Java - Aula 08
Java - Aula 08
 
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

Gerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem OrganizacionalGerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem OrganizacionalJacqueline Cerqueira
 
Apostila da CONQUISTA_ para o 6ANO_LP_UNI1.pptx
Apostila da CONQUISTA_ para o 6ANO_LP_UNI1.pptxApostila da CONQUISTA_ para o 6ANO_LP_UNI1.pptx
Apostila da CONQUISTA_ para o 6ANO_LP_UNI1.pptxIsabelaRafael2
 
ABRIL VERDE.pptx Slide sobre abril ver 2024
ABRIL VERDE.pptx Slide sobre abril ver 2024ABRIL VERDE.pptx Slide sobre abril ver 2024
ABRIL VERDE.pptx Slide sobre abril ver 2024Jeanoliveira597523
 
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASBCRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASBAline Santana
 
Pedologia- Geografia - Geologia - aula_01.pptx
Pedologia- Geografia - Geologia - aula_01.pptxPedologia- Geografia - Geologia - aula_01.pptx
Pedologia- Geografia - Geologia - aula_01.pptxleandropereira983288
 
QUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptx
QUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptxQUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptx
QUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptxIsabellaGomes58
 
Prova uniasselvi tecnologias da Informação.pdf
Prova uniasselvi tecnologias da Informação.pdfProva uniasselvi tecnologias da Informação.pdf
Prova uniasselvi tecnologias da Informação.pdfArthurRomanof1
 
Regência Nominal e Verbal português .pdf
Regência Nominal e Verbal português .pdfRegência Nominal e Verbal português .pdf
Regência Nominal e Verbal português .pdfmirandadudu08
 
Apresentação | Eleições Europeias 2024-2029
Apresentação | Eleições Europeias 2024-2029Apresentação | Eleições Europeias 2024-2029
Apresentação | Eleições Europeias 2024-2029Centro Jacques Delors
 
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃOLEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃOColégio Santa Teresinha
 
Programa de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades MotorasPrograma de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades MotorasCassio Meira Jr.
 
Governo Provisório Era Vargas 1930-1934 Brasil
Governo Provisório Era Vargas 1930-1934 BrasilGoverno Provisório Era Vargas 1930-1934 Brasil
Governo Provisório Era Vargas 1930-1934 Brasillucasp132400
 
Época Realista y la obra de Madame Bovary.
Época Realista y la obra de Madame Bovary.Época Realista y la obra de Madame Bovary.
Época Realista y la obra de Madame Bovary.keislayyovera123
 
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptxAD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptxkarinedarozabatista
 
E agora?! Já não avalio as atitudes e valores?
E agora?! Já não avalio as atitudes e valores?E agora?! Já não avalio as atitudes e valores?
E agora?! Já não avalio as atitudes e valores?Rosalina Simão Nunes
 
Aula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologia
Aula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologiaAula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologia
Aula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologiaaulasgege
 
BRASIL - DOMÍNIOS MORFOCLIMÁTICOS - Fund 2.pdf
BRASIL - DOMÍNIOS MORFOCLIMÁTICOS - Fund 2.pdfBRASIL - DOMÍNIOS MORFOCLIMÁTICOS - Fund 2.pdf
BRASIL - DOMÍNIOS MORFOCLIMÁTICOS - Fund 2.pdfHenrique Pontes
 
trabalho wanda rocha ditadura
trabalho wanda rocha ditaduratrabalho wanda rocha ditadura
trabalho wanda rocha ditaduraAdryan Luiz
 

Último (20)

Gerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem OrganizacionalGerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem Organizacional
 
Apostila da CONQUISTA_ para o 6ANO_LP_UNI1.pptx
Apostila da CONQUISTA_ para o 6ANO_LP_UNI1.pptxApostila da CONQUISTA_ para o 6ANO_LP_UNI1.pptx
Apostila da CONQUISTA_ para o 6ANO_LP_UNI1.pptx
 
Em tempo de Quaresma .
Em tempo de Quaresma                            .Em tempo de Quaresma                            .
Em tempo de Quaresma .
 
ABRIL VERDE.pptx Slide sobre abril ver 2024
ABRIL VERDE.pptx Slide sobre abril ver 2024ABRIL VERDE.pptx Slide sobre abril ver 2024
ABRIL VERDE.pptx Slide sobre abril ver 2024
 
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASBCRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
 
Pedologia- Geografia - Geologia - aula_01.pptx
Pedologia- Geografia - Geologia - aula_01.pptxPedologia- Geografia - Geologia - aula_01.pptx
Pedologia- Geografia - Geologia - aula_01.pptx
 
QUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptx
QUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptxQUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptx
QUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptx
 
Prova uniasselvi tecnologias da Informação.pdf
Prova uniasselvi tecnologias da Informação.pdfProva uniasselvi tecnologias da Informação.pdf
Prova uniasselvi tecnologias da Informação.pdf
 
Regência Nominal e Verbal português .pdf
Regência Nominal e Verbal português .pdfRegência Nominal e Verbal português .pdf
Regência Nominal e Verbal português .pdf
 
Apresentação | Eleições Europeias 2024-2029
Apresentação | Eleições Europeias 2024-2029Apresentação | Eleições Europeias 2024-2029
Apresentação | Eleições Europeias 2024-2029
 
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃOLEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
 
Programa de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades MotorasPrograma de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades Motoras
 
Governo Provisório Era Vargas 1930-1934 Brasil
Governo Provisório Era Vargas 1930-1934 BrasilGoverno Provisório Era Vargas 1930-1934 Brasil
Governo Provisório Era Vargas 1930-1934 Brasil
 
Época Realista y la obra de Madame Bovary.
Época Realista y la obra de Madame Bovary.Época Realista y la obra de Madame Bovary.
Época Realista y la obra de Madame Bovary.
 
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptxAD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
 
E agora?! Já não avalio as atitudes e valores?
E agora?! Já não avalio as atitudes e valores?E agora?! Já não avalio as atitudes e valores?
E agora?! Já não avalio as atitudes e valores?
 
Aula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologia
Aula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologiaAula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologia
Aula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologia
 
BRASIL - DOMÍNIOS MORFOCLIMÁTICOS - Fund 2.pdf
BRASIL - DOMÍNIOS MORFOCLIMÁTICOS - Fund 2.pdfBRASIL - DOMÍNIOS MORFOCLIMÁTICOS - Fund 2.pdf
BRASIL - DOMÍNIOS MORFOCLIMÁTICOS - Fund 2.pdf
 
XI OLIMPÍADAS DA LÍNGUA PORTUGUESA -
XI OLIMPÍADAS DA LÍNGUA PORTUGUESA      -XI OLIMPÍADAS DA LÍNGUA PORTUGUESA      -
XI OLIMPÍADAS DA LÍNGUA PORTUGUESA -
 
trabalho wanda rocha ditadura
trabalho wanda rocha ditaduratrabalho wanda rocha ditadura
trabalho wanda rocha ditadura
 

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.