| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
$un$
Registrado: 29 Jun 2012 Mensajes: 1
| Publicado: 29/06/2012 9:44 am | | | Título: Consulta sobre punteros |
| [C++] Quisiera saber exactamente cuál es la diferencia del uso de '*' con '&', en los siguientes contextos: - Al declarar un subprograma. - Al hacer el llamado a dicho subprograma (dentro de main, por ejemplo). - Al validar el subprograma (cuando desarrollo todo lo que éste tiene que hacer). Muchas gracias. Espero sus prontas respuestas  |
| | Volver arriba | |  | Sorancio

Registrado: 29 May 2009 Mensajes: 1157 Ubicación: España
| Publicado: 30/06/2012 1:17 am | | | Título: |
| Imagino que la declaración de un subprograma se refiere a la declaración de un método o función...
Sea un método o función:
En este caso la función o método recibe una referencia a un objeto de tipo T y devuelve una referencia a un objeto de tipo T. Las referencias diferen de la copia de valores en que, por supuesto, no se pasa una copia del valor, si no el mismo objeto. Un ejemplo:
| Código: | void multiplica_2(int &valor) { valor *= 2; } ... int k = 15; multiplica_2(k); printf("k = %d\n", k);
|
La salida será: k = 30
Si no fuese así, pasarías una copia y k no se modificaría. Esto es peligroso así que manejalo con cuidado.
El símbolo & en la declaración de cualquier cosa es el símbolo de referencia. Pero cuando está en un rvalue (en la parte de la derecha de una asignación, por ejemplo) es el operador de dirección de. Tiene una relación estricta con el operador * de puntero e indirección.
Compila este programa y ejecútalo para entenderlo:
| Código: | #include <stdio.h>
int main() { int *puntero; int valor = 52;
puntero = &valor; *puntero += 25;
printf("puntero apunta a %p\n", puntero); printf("la dirección de memoria de valor es %p\n", &valor); printf("el valor de 'valor' es %d\n", valor); printf("el valor de aquello a lo que apunta puntero es %d\n", *puntero);
return 0; } |
_________________ Mi página web (en inglés): |
| | Volver arriba | |  | leosan
Registrado: 19 Abr 2012 Mensajes: 730 Ubicación: GRAN CANARIA
| | | Volver arriba | |  | | leosan
Registrado: 19 Abr 2012 Mensajes: 730 Ubicación: GRAN CANARIA
| Publicado: 30/06/2012 5:45 am | | | Título: |
| Espero no haberme equivocado en la "descripción" :
| Código: | #include <stdio.h> int main() { int i=0,*puntero,*pmat; int valor = 52; int mat [10]; mat[0]=10, mat[1]=30,mat[2]=50,mat[3]=60; puntero = &valor; printf("puntero apunta a %p\n", puntero); printf("la direccion de memoria de valor es %p\n", &valor); printf("el valor de 'valor' es %d\n", valor); printf("el valor de aquello a lo que apunta puntero es %d\n", *puntero); *puntero += 25; printf("el valor de aquello a lo que apunta puntero es %d\n\n\n", *puntero);
pmat=&mat[0] ;//<=== pmat "apunta=da" a la direccion de mat[0] printf("pmat apunta a %p\n", pmat); printf("el valor de aquello a lo que apunta pmat es %d\n\n", *pmat);//1
i=*++pmat;//<=== pmat "apunta" a la direccion de mat[1] printf("el valor de aquello a lo que apunta *++pmat es %d\n\n", i);//30
i=*pmat+1; printf("el valor de aquello a lo que apunta *pmat+1 es %d\n\n", i);//31
i=*(pmat+1);//<=== pmat "apunta" a la direccion de mat[2] printf("el valor de aquello a lo que apunta *(pmat+1) es %d\n\n", i);//50
i=*++pmat;//<=== pmat "apunta" a la direccion de mat[2]; printf("el valor de aquello a lo que apunta *++pmat es %d\n\n", i);//50
i=*++pmat;//<=== pmat "apunta" a la direccion de mat[3] printf("el valor de aquello a lo que apunta *++pmat es %d\n\n", i);//60
i=*pmat+5;//<=== pmat "apunta" a la direccion de mat[3]+5 printf("el valor de aquello a lo que apunta *pmat+5 es %d\n\n", i);//65
return 0; }
|
...................... .................................. |
| | Volver arriba | |  | Sorancio

Registrado: 29 May 2009 Mensajes: 1157 Ubicación: España
| Publicado: 30/06/2012 11:36 am | | | Título: |
| | leosan escribió: | Supongo que querías poner:
| Código: | #include <stdio.h> int main() { int *puntero; int valor = 52; puntero = &valor; printf("puntero apunta a %p\n", puntero); printf("la direccion de memoria de valor es %p\n", &valor); printf("el valor de 'valor' es %d\n", valor); printf("el valor de aquello a lo que apunta puntero es %d\n", *puntero); *puntero += 25; printf("el valor de aquello a lo que apunta puntero es %d\n", *puntero); return 0; }
|
........................:lol: :lol: :lol: :lol: :lol:................................... |
Los dos son válidos y muestran el mismo significado xD _________________ Mi página web (en inglés): |
| | Volver arriba | |  | Masakre
Registrado: 06 Jun 2012 Mensajes: 245
| Publicado: 03/07/2012 12:26 pm | | | Título: |
| Pues, me parece que preguntaba en C++ (la diferencia en este caso, ¿estaría simplemente determinada por los cout y cin?).
Estos son justamente los temas que poco entiendo (aún no llegamos a ellos en lo que me van enseñando, pero los he visto ser usados y como que no explican mucho de ello). |
| | Volver arriba | |  | | untio

Registrado: 17 Sep 2008 Mensajes: 380 Ubicación: MICA S.A.
| Publicado: 05/07/2012 11:02 am | | | Título: |
| Hola,
Imagina que tienes que pasar un montón de parámetros por referencia.
Que si * en la declaración.
Que si * al modificar el contenido de la dirección.
Pues, para hacer la vida más fácil en C++ está &.
Ten en cuenta que C++ quiere significar C + 1 paso más.
Espero que sirva para algo. _________________ Hago algo muy raro: primero leo las instrucciones. |
| | Volver arriba | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |