| Ver tema anterior :: Ver siguiente tema |
| Autor | Mensaje |
|---|
Munire
Registrado: 16 Ene 2011 Mensajes: 8 Ubicación: en el ciberdespacio (España)
| Publicado: 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
| Publicado: 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
| Publicado: 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
| Publicado: 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:
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)
| Publicado: 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 | |
 |
|
|