elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Cuestión puntero y referencia
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Cuestión puntero y referencia  (Leído 3,022 veces)
darkvidhack

Desconectado Desconectado

Mensajes: 159


Be Linux my friend...


Ver Perfil WWW
Cuestión puntero y referencia
« 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 ;)


En línea

live and let die

la duda es la base de todo conocimiento
Ferno


Desconectado Desconectado

Mensajes: 375


Ver Perfil
Re: Cuestión puntero y referencia
« Respuesta #1 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!!


« Última modificación: 9 Mayo 2011, 16:37 pm por Ferno » En línea

Lambda


Desconectado Desconectado

Mensajes: 371



Ver Perfil WWW
Re: Cuestión puntero y referencia
« Respuesta #2 en: 9 Mayo 2011, 16:35 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
En línea

darkvidhack

Desconectado Desconectado

Mensajes: 159


Be Linux my friend...


Ver Perfil WWW
Re: Cuestión puntero y referencia
« Respuesta #3 en: 10 Mayo 2011, 10:17 am »

Gracias por las respuestas jeje

Un saludo ;)
En línea

live and let die

la duda es la base de todo conocimiento
satu


Desconectado Desconectado

Mensajes: 301

Siempre aprendiendo


Ver Perfil WWW
Re: Cuestión puntero y referencia
« Respuesta #4 en: 10 Mayo 2011, 16:31 pm »

Hola

También existe esto:
Código
  1. void funcion(int *&a)
  2. {
  3. }
  4.  

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

Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. void uno(int *b)
  6. {
  7.    *b = 1;
  8.    b = NULL;
  9. }
  10.  
  11. void dos(int &a)
  12. {
  13.    a = 2;
  14. }
  15.  
  16. void tres(int *&b)
  17. {
  18.    *b = 3;
  19.    b = NULL;
  20. }
  21.  
  22. int main()
  23. {
  24.    int a = 0;
  25.    int *b = &a;
  26.    cout << a << " - " << *b << endl;
  27.    uno(b);
  28.    cout << a << " - ";
  29.    if(b==NULL)
  30.        cout<<"Ahora b apunta a NULL"<<endl;
  31.    else
  32.         cout<< *b << endl;
  33.    dos(a);
  34.    cout << a << " - " << *b << endl;
  35.    tres(b);
  36.    cout << a << " - ";
  37.    if(b==NULL)
  38.        cout<<"Ahora b apunta a NULL"<<endl;
  39.    else
  40.        cout << *b << endl;
  41.    return 0;
  42. }
  43.  

Saludos
« Última modificación: 10 Mayo 2011, 16:40 pm por satu » En línea

Breakbeat como forma de vida
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[SOLUCIONADO] C++ - Error con memoria dinámica: ¿Puntero por referencia?
Programación C/C++
xaps 7 5,612 Último mensaje 22 Noviembre 2013, 17:16 pm
por lapras
pasar por referencia un puntero
Programación C/C++
m@o_614 2 7,095 Último mensaje 18 Enero 2014, 18:13 pm
por rir3760
[Problema - novato] En este caso, ¿referencia, puntero u otra manera? ¿por qué? « 1 2 »
Programación C/C++
EzianGES 10 4,148 Último mensaje 18 Febrero 2014, 15:54 pm
por EzianGES
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines