Cuestión puntero y referencia

Iniciado por darkvidhack, 9 Mayo 2011, 11:57 AM

0 Miembros y 1 Visitante están viendo este tema.

darkvidhack

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 ;)
live and let die

la duda es la base de todo conocimiento

Ferno

#1
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!!

Lambda

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

darkvidhack

Gracias por las respuestas jeje

Un saludo ;)
live and let die

la duda es la base de todo conocimiento

satu

#4
Hola

También existe esto:
Código (cpp) [Seleccionar]

void funcion(int *&a)
{
}


que tiene otro uso. Para que lo comprendas te pongo un ejemplo

Código (cpp) [Seleccionar]

#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
Breakbeat como forma de vida