SlideShare ist ein Scribd-Unternehmen logo
1 von 29
Downloaden Sie, um offline zu lesen
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.

Weitere ähnliche Inhalte

Was ist angesagt?

Lógica de programação pascal
Lógica de programação   pascalLógica de programação   pascal
Lógica de programação pascalJocelma Rios
 
Cours de programmation en c
Cours de programmation en cCours de programmation en c
Cours de programmation en cbenouini rachid
 
BD I - Aula 03 - Atributos, Tuplas, PK, FK, Relacionamento, Int. Ref
BD I - Aula 03 - Atributos, Tuplas, PK, FK, Relacionamento, Int. RefBD I - Aula 03 - Atributos, Tuplas, PK, FK, Relacionamento, Int. Ref
BD I - Aula 03 - Atributos, Tuplas, PK, FK, Relacionamento, Int. RefRodrigo Kiyoshi Saito
 
Fonctions chaine
Fonctions chaineFonctions chaine
Fonctions chaineAfef Ilahi
 
Chapitre1: Langage Python
Chapitre1: Langage PythonChapitre1: Langage Python
Chapitre1: Langage PythonAziz Darouichi
 
Lógica de programação { para iniciantes }
Lógica de programação { para iniciantes }Lógica de programação { para iniciantes }
Lógica de programação { para iniciantes }Mariana Camargo
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScriptBruno Catão
 
Educar na Cultura Digital
Educar na Cultura DigitalEducar na Cultura Digital
Educar na Cultura DigitalEditora Moderna
 
Segurança na internet 6º Ano
Segurança na internet 6º AnoSegurança na internet 6º Ano
Segurança na internet 6º AnoGilberto Campos
 
Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)Bruno Grange
 

Was ist angesagt? (20)

Lógica de programação pascal
Lógica de programação   pascalLógica de programação   pascal
Lógica de programação pascal
 
Estrutura de Dados - Ponteiros
Estrutura de Dados - PonteirosEstrutura de Dados - Ponteiros
Estrutura de Dados - Ponteiros
 
C++ Funções
 C++ Funções C++ Funções
C++ Funções
 
Cours de programmation en c
Cours de programmation en cCours de programmation en c
Cours de programmation en c
 
BD I - Aula 03 - Atributos, Tuplas, PK, FK, Relacionamento, Int. Ref
BD I - Aula 03 - Atributos, Tuplas, PK, FK, Relacionamento, Int. RefBD I - Aula 03 - Atributos, Tuplas, PK, FK, Relacionamento, Int. Ref
BD I - Aula 03 - Atributos, Tuplas, PK, FK, Relacionamento, Int. Ref
 
COURS_PYTHON_22.ppt
COURS_PYTHON_22.pptCOURS_PYTHON_22.ppt
COURS_PYTHON_22.ppt
 
Fonctions chaine
Fonctions chaineFonctions chaine
Fonctions chaine
 
Chapitre1: Langage Python
Chapitre1: Langage PythonChapitre1: Langage Python
Chapitre1: Langage Python
 
#4 Primeiros comandos no MongoDB
#4   Primeiros comandos no MongoDB#4   Primeiros comandos no MongoDB
#4 Primeiros comandos no MongoDB
 
Lógica de programação { para iniciantes }
Lógica de programação { para iniciantes }Lógica de programação { para iniciantes }
Lógica de programação { para iniciantes }
 
Introduction à Python
Introduction à PythonIntroduction à Python
Introduction à Python
 
Python - Introdução
Python - IntroduçãoPython - Introdução
Python - Introdução
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScript
 
Algoritmos - Aula 07 A - Vetores
Algoritmos - Aula 07 A - VetoresAlgoritmos - Aula 07 A - Vetores
Algoritmos - Aula 07 A - Vetores
 
Linguagem C - Estruturas
Linguagem C - EstruturasLinguagem C - Estruturas
Linguagem C - Estruturas
 
Educar na Cultura Digital
Educar na Cultura DigitalEducar na Cultura Digital
Educar na Cultura Digital
 
Segurança na internet 6º Ano
Segurança na internet 6º AnoSegurança na internet 6º Ano
Segurança na internet 6º Ano
 
Software educacionais tipos
Software educacionais   tiposSoftware educacionais   tipos
Software educacionais tipos
 
Tratamento de erros
Tratamento de errosTratamento de erros
Tratamento de erros
 
Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)
 

Andere mochten auch

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
 

Andere mochten auch (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
 

Ähnlich wie Revisão sobre ponteiros em C

Ähnlich wie 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
 

Mehr von 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
 

Mehr von 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
 

Kürzlich hochgeladen

O desenvolvimento é um conceito mais amplo, pode ter um contexto biológico ou...
O desenvolvimento é um conceito mais amplo, pode ter um contexto biológico ou...O desenvolvimento é um conceito mais amplo, pode ter um contexto biológico ou...
O desenvolvimento é um conceito mais amplo, pode ter um contexto biológico ou...azulassessoria9
 
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
 
apostila filosofia 1 ano 1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...
apostila filosofia 1 ano  1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...apostila filosofia 1 ano  1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...
apostila filosofia 1 ano 1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...SileideDaSilvaNascim
 
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...PatriciaCaetano18
 
Sopa de letras | Dia da Europa 2024 (nível 1)
Sopa de letras | Dia da Europa 2024 (nível 1)Sopa de letras | Dia da Europa 2024 (nível 1)
Sopa de letras | Dia da Europa 2024 (nível 1)Centro Jacques Delors
 
Historia de Portugal - Quarto Ano - 2024
Historia de Portugal - Quarto Ano - 2024Historia de Portugal - Quarto Ano - 2024
Historia de Portugal - Quarto Ano - 2024Cabiamar
 
Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...
Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...
Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...AnaAugustaLagesZuqui
 
Questões de Língua Portuguesa - gincana da LP
Questões de Língua Portuguesa - gincana da LPQuestões de Língua Portuguesa - gincana da LP
Questões de Língua Portuguesa - gincana da LPEli Gonçalves
 
atividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdf
atividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdfatividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdf
atividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdfAutonoma
 
Acessibilidade, inclusão e valorização da diversidade
Acessibilidade, inclusão e valorização da diversidadeAcessibilidade, inclusão e valorização da diversidade
Acessibilidade, inclusão e valorização da diversidadeLEONIDES PEREIRA DE SOUZA
 
INTERTEXTUALIDADE atividade muito boa para
INTERTEXTUALIDADE   atividade muito boa paraINTERTEXTUALIDADE   atividade muito boa para
INTERTEXTUALIDADE atividade muito boa paraAndreaPassosMascaren
 
AULÃO de Língua Portuguesa para o Saepe 2022
AULÃO de Língua Portuguesa para o Saepe 2022AULÃO de Língua Portuguesa para o Saepe 2022
AULÃO de Língua Portuguesa para o Saepe 2022LeandroSilva126216
 
Caderno de exercícios Revisão para o ENEM (1).pdf
Caderno de exercícios Revisão para o ENEM (1).pdfCaderno de exercícios Revisão para o ENEM (1).pdf
Caderno de exercícios Revisão para o ENEM (1).pdfJuliana Barbosa
 
Slide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemáticaSlide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemáticash5kpmr7w7
 
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
 
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...azulassessoria9
 
Sopa de letras | Dia da Europa 2024 (nível 2)
Sopa de letras | Dia da Europa 2024 (nível 2)Sopa de letras | Dia da Europa 2024 (nível 2)
Sopa de letras | Dia da Europa 2024 (nível 2)Centro Jacques Delors
 
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...azulassessoria9
 
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.docGUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.docPauloHenriqueGarciaM
 
Apresentação | Símbolos e Valores da União Europeia
Apresentação | Símbolos e Valores da União EuropeiaApresentação | Símbolos e Valores da União Europeia
Apresentação | Símbolos e Valores da União EuropeiaCentro Jacques Delors
 

Kürzlich hochgeladen (20)

O desenvolvimento é um conceito mais amplo, pode ter um contexto biológico ou...
O desenvolvimento é um conceito mais amplo, pode ter um contexto biológico ou...O desenvolvimento é um conceito mais amplo, pode ter um contexto biológico ou...
O desenvolvimento é um conceito mais amplo, pode ter um contexto biológico ou...
 
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
 
apostila filosofia 1 ano 1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...
apostila filosofia 1 ano  1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...apostila filosofia 1 ano  1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...
apostila filosofia 1 ano 1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...
 
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
 
Sopa de letras | Dia da Europa 2024 (nível 1)
Sopa de letras | Dia da Europa 2024 (nível 1)Sopa de letras | Dia da Europa 2024 (nível 1)
Sopa de letras | Dia da Europa 2024 (nível 1)
 
Historia de Portugal - Quarto Ano - 2024
Historia de Portugal - Quarto Ano - 2024Historia de Portugal - Quarto Ano - 2024
Historia de Portugal - Quarto Ano - 2024
 
Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...
Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...
Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...
 
Questões de Língua Portuguesa - gincana da LP
Questões de Língua Portuguesa - gincana da LPQuestões de Língua Portuguesa - gincana da LP
Questões de Língua Portuguesa - gincana da LP
 
atividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdf
atividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdfatividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdf
atividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdf
 
Acessibilidade, inclusão e valorização da diversidade
Acessibilidade, inclusão e valorização da diversidadeAcessibilidade, inclusão e valorização da diversidade
Acessibilidade, inclusão e valorização da diversidade
 
INTERTEXTUALIDADE atividade muito boa para
INTERTEXTUALIDADE   atividade muito boa paraINTERTEXTUALIDADE   atividade muito boa para
INTERTEXTUALIDADE atividade muito boa para
 
AULÃO de Língua Portuguesa para o Saepe 2022
AULÃO de Língua Portuguesa para o Saepe 2022AULÃO de Língua Portuguesa para o Saepe 2022
AULÃO de Língua Portuguesa para o Saepe 2022
 
Caderno de exercícios Revisão para o ENEM (1).pdf
Caderno de exercícios Revisão para o ENEM (1).pdfCaderno de exercícios Revisão para o ENEM (1).pdf
Caderno de exercícios Revisão para o ENEM (1).pdf
 
Slide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemáticaSlide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemática
 
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.
 
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
 
Sopa de letras | Dia da Europa 2024 (nível 2)
Sopa de letras | Dia da Europa 2024 (nível 2)Sopa de letras | Dia da Europa 2024 (nível 2)
Sopa de letras | Dia da Europa 2024 (nível 2)
 
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
 
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.docGUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
 
Apresentação | Símbolos e Valores da União Europeia
Apresentação | Símbolos e Valores da União EuropeiaApresentação | Símbolos e Valores da União Europeia
Apresentação | Símbolos e Valores da União Europeia
 

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.