Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: darkvidhack en 9 Mayo 2011, 11:57 AM

Título: Cuestión puntero y referencia
Publicado por: darkvidhack en 9 Mayo 2011, 11:57 AM
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 ;)
Título: Re: Cuestión puntero y referencia
Publicado por: Ferno en 9 Mayo 2011, 15:51 PM
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!!
Título: Re: Cuestión puntero y referencia
Publicado por: Lambda en 9 Mayo 2011, 16:35 PM
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
Título: Re: Cuestión puntero y referencia
Publicado por: darkvidhack en 10 Mayo 2011, 10:17 AM
Gracias por las respuestas jeje

Un saludo ;)
Título: Re: Cuestión puntero y referencia
Publicado por: satu en 10 Mayo 2011, 16:31 PM
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