Programar em C/Ponteiros: diferenças entre revisões

[edição não verificada][edição não verificada]
Conteúdo apagado Conteúdo adicionado
Edudobay (discussão | contribs)
Edudobay (discussão | contribs)
Linha 291:
= Avançado =
 
== Ponteiros para Ponteirosponteiros ==
 
Acompanhe este exemplo:
Linha 360:
Para o compilador, você não fez mudança alguma, justamente por conta dessa equivalência. Em ambos os casos, foi passado o endereço do vetor para as funções.
 
 
== Ponteiros para funções ==
 
Os ponteiros para funções servem, geralmente, para passar uma função como argumento para uma outra função.
 
// pointer to functions
#include <iostream>
using namespace std;
int addition (int a, int b)
{
return (a+b);
}
int operation (int x, int y, int (*functocall)(int,int))
{
int g;
g = (*functocall)(x,y);
return (g);
}
int main ()
{
int m; //declaro 2 variáveis int
m = operation (7, 5, addition); /*chamo a função operation e coloco o valor que retornar na variável m*/
cout <<m; //imprimo a variável n
system ("pause");
return 0;
}
 
 
Isto parece complicado mas não é!
a 1ª linha do main() declara a variavel m
a 2ª linha diz para atribuir o valor da função operation e m
a 3ª diz para imprimir esse valor
 
Apenas isto. o grande problema está na 2ª linha
Damos 3 argumentos á função, e um deles é uma função.
Assim antes de o compilador ir executar a 2ª linha vai executar a função do 3º parâmetro
Por isso a 2ª linha ficaria m = operation (7, 5, addition(a+b));
Agora sim executar a função da 2ª linha e soma 7+5.
 
'''Pergunta''': por acaso não sei bem se é assim que a função é executada, ou antes vai substituir o functocall
 
 
 
Vamos a outro exemplo para consolidar, esta parte:
 
// pointer to functions
#include <iostream>
using namespace std;
int addition (int a, int b)
{
return (a+b);
}
int subtraction (int a, int b)
{
return (a-b);
}
int (*minus)(int,int) = subtraction;
int operation (int x, int y, int (*functocall)(int,int))
{
int g;
g = (*functocall)(x,y);
return (g);
}
int main ()
{
int m,n; //declare 2 variáveis int
m = operation (7, 5, addition); /*chamo a função operation e coloco o valor que retornar na varaivel m*/
n = operation (20, m, minus); /* chamo a função operations coloco valor na variável n*/
cout <<n; //imprimo a variável n
system (“pauses”);
return 0;
}
 
É a repetição do exercício anterior apenas com o extra da variável n.
 
 
 
 
 
 
 
= C++ =
 
== Passagem por referência ==
 
Ainda existe uma outra maneira para isto resulta é a '''passagem por referência'''
Linha 463 ⟶ 547:
Podemos pensar que passando por referência parece ser muito mais simples do que passado por address.
Na verdade existem algumas vertas funções da biblioteca que só permitem a passagem por address.
 
== Uso de funções em funções recorrendo a ponteiros (Mais complicado) ==
 
// pointer to functions
#include <iostream>
using namespace std;
int addition (int a, int b)
{
return (a+b);
}
int operation (int x, int y, int (*functocall)(int,int))
{
int g;
g = (*functocall)(x,y);
return (g);
}
int main ()
{
int m; //declaro 2 variáveis int
m = operation (7, 5, addition); /*chamo a função operation e coloco o valor que retornar na variável m*/
cout <<m; //imprimo a variável n
system ("pause");
return 0;
}
 
 
Isto parece complicado mas não é!
a 1ª linha do main() declara a variavel m
a 2ª linha diz para atribuir o valor da função operation e m
a 3ª diz para imprimir esse valor
 
Apenas isto. o grande problema está na 2ª linha
Damos 3 argumentos á função, e um deles é uma função.
Assim antes de o compilador ir executar a 2ª linha vai executar a função do 3º parâmetro
Por isso a 2ª linha ficaria m = operation (7, 5, addition(a+b));
Agora sim executar a função da 2ª linha e soma 7+5.
 
'''Pergunta''': por acaso não sei bem se é assim que a função é executada, ou antes vai substituir o functocall
 
 
 
Vamos a outro exemplo para consolidar, esta parte:
 
// pointer to functions
#include <iostream>
using namespace std;
int addition (int a, int b)
{
return (a+b);
}
int subtraction (int a, int b)
{
return (a-b);
}
int (*minus)(int,int) = subtraction;
int operation (int x, int y, int (*functocall)(int,int))
{
int g;
g = (*functocall)(x,y);
return (g);
}
int main ()
{
int m,n; //declare 2 variáveis int
m = operation (7, 5, addition); /*chamo a função operation e coloco o valor que retornar na varaivel m*/
n = operation (20, m, minus); /* chamo a função operations coloco valor na variável n*/
cout <<n; //imprimo a variável n
system (“pauses”);
return 0;
}
 
É a repetição do exercício anterior apenas com o extra da variável n.