Hola, tengo una duda, para explicarla pongo un ejemplo:
int valor=10;
int *p=&valor;
//Si llamamos a una función cualquiera de la siguiente manera
void Cuadrado (int *p) { *p=3; }
//¿Sería igual que llamarla de esta otra?
void Cuadrado (int &valor) { valor=3; }
//En la primera llamada, se pasa como parametro un puntero que contiene una dirección de memoria, y en la segunda, se hace un paso por referencia de la variable valor, de las dos formas se pasa la dirección de memoria de la variable valor, asi que, daría igual de la forma en que se llamase ya que en las dos se le pasa la misma dirección, no?
Gracias de antemano ;)
El parámetro que espera es un int pointer (int*) de nombre p. El operador * actúa sobre el tipo de la variable del parámetro de la función.
Donde tenés que tener cuidado es en la llamada a dicha función.
En este caso, se debe hacer:
Cuadrado (&valor);
De ésta manera, a la variable de función p que es un int*, se le asigna la dirección de memoria de valor.
PD: Buscando un poco más, me di cuenta que estaba equivocado. Ambas son correctas!!
Cita de: Ferno en 9 Mayo 2011, 15:51 PM
No. La forma correcta de hacer el paso por referencia es la primer opción.
El parámetro que espera es un int pointer (int*) de nombre p. El operador * actúa sobre el tipo de la variable del parámetro de la función. Por eso es incoherente el utilizar algo como (int&).
Donde tenés que tener cuidado es en la llamada a dicha función.
En este caso, se debe hacer:
Cuadrado (&valor);
De ésta manera, a la variable de función p que es un int*, se le asigna la dirección de memoria de valor.
Es totalmente correcto lo que el esta planteando
http://en.wikipedia.org/wiki/Reference_%28C%2B%2B%29
Sobre la pregunta, si, ambas tienen el mismo resultado, una asignas pasando un puntero y la otra asignas pasando una referencia
Gracias por las respuestas jeje
Un saludo ;)
Hola
También existe esto:
void funcion(int *&a)
{
}
que tiene otro uso. Para que lo comprendas te pongo un ejemplo
#include <iostream>
using namespace std;
void uno(int *b)
{
*b = 1;
b = NULL;
}
void dos(int &a)
{
a = 2;
}
void tres(int *&b)
{
*b = 3;
b = NULL;
}
int main()
{
int a = 0;
int *b = &a;
cout << a << " - " << *b << endl;
uno(b);
cout << a << " - ";
if(b==NULL)
cout<<"Ahora b apunta a NULL"<<endl;
else
cout<< *b << endl;
dos(a);
cout << a << " - " << *b << endl;
tres(b);
cout << a << " - ";
if(b==NULL)
cout<<"Ahora b apunta a NULL"<<endl;
else
cout << *b << endl;
return 0;
}
Saludos