/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

No entiendo este uso del Ampersand

 
      Índice del Foro elrincondelc.com -> C/C++ en General
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
Munire



Registrado: 16 Ene 2011
Mensajes: 8
Ubicación: en el ciberdespacio (España)

MensajePublicado: 22/01/2011 5:12 am
Título: No entiendo este uso del Ampersand

Hola, me podeis esplicar que es lo que hace el & en estas sentencias?
por mas que le doy vueltas no lo termino de entender, por que el & devuelve la direccion de memoria...

void CHora::GetHora (int &nHoras, int &nMinutos, int &nSegundos,char *pszFormato) const

hora.GetHora(horas, minutos, segundos, formato);

saludos
Volver arriba
Sorancio



Registrado: 29 May 2009
Mensajes: 1157
Ubicación: España

MensajePublicado: 22/01/2011 5:38 am
Título:

Ese código es de C++ y el & indica una referencia.
Volver arriba
piou



Registrado: 03 Sep 2006
Mensajes: 65

MensajePublicado: 22/01/2011 6:44 am
Título:

El & es un operador de referencia, devuelve la dirección de memoria de la variable porque eso es para lo que sirve, no termino de entender la pregunta, el & hace eso en C/C++
Volver arriba
Pantalàimon_



Registrado: 17 Jul 2007
Mensajes: 1345

MensajePublicado: 22/01/2011 7:13 am
Título:

En C esa sintaxis que citas no existe. En C++ sí.

En C y C++ si tienes una variable a de tipo int, &a significa "la dirección de a".

Otra cosa diferente es el uso de & en el ejemplo que has citado. Pongamos un ejemplo más sencillo:
Código:
func( int &a );

Esto quiere decir que el argumento de func se pasa por referencia.

¿Que quiere decir que se pasa por referencia? Quizá habituado a C no estes al corriente de lo que significa. Para eso hay que entender dos conceptos que son el paso por valor y el paso por referencia.

Paso por valor: referido a cuando pasas una variable a una función y dicha variable sólo se puede usar pero no cambiar. Es decir, una vez salgas de la función la variable conservará el mismo valor de entrada.

Paso por referencia: referido a cuando pasas una variable a una función y los cambios realizados en dicha variable se conserven una vez sales de la función. Es decir, una vez salgas de la función, la varible habrá cambiado de valor si dentro de la función se ha efectuado un cambio de valor de dicha variable.

Aquí un ejemplo en C++ para que acabe de quedar claro la diferencia entre paso por valor o referencia.

Código:
#include<iostream>

void fval(int);
void fref(int&);

int main()
{
   int a = 2;
   std::cout << "El valor de a es " << a << std::end;
   std::cout << "Se llama a la funcion fval()" << std::end;
   fval( a );
   std::cout << "El valor de a es " << a << std::end;
   std::cout << "Se llama a la funcion fref()" << std::end;
   fref( a );
   std::cout << "El valor de a es " << a << std::end;

void fval( int a )
{
   a++;
}

void fref( int &a )
{
   a++;
}


En C como no se puede hacer paso por referencia, la manera de simularlo es haciendo lo siguiente:
Código:

/* ... */

int main()
{
   int a = 2;
   /* ... */
   fref(&a);
   /*... */
}

void fref( int *a )
{
   *a++;
}


Edit: he contestado pensando que el primer y tercer post los ha escrito el mismo usuario y no es así. Mis disculpas, espero que sirva de algo la explicación igualmente.

Un saludo!
Volver arriba
Munire



Registrado: 16 Ene 2011
Mensajes: 8
Ubicación: en el ciberdespacio (España)

MensajePublicado: 22/01/2011 9:05 am
Título:

Gracias por responder, ya me ha quedado claro.

Se perfectamente lo que es paso por valor y referencia en C, pero ignoraba que en C++ (estoy empezando) habia otra forma de ponerlo, que es con &.

Entonces al ver el codigo y ver el & yo pensaba que devolvia la direccion de memoria y por eso no lo entendia.


saludos
Volver arriba
      Índice del Foro elrincondelc.com -> C/C++ en General
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com