Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: snoopty en 30 Noviembre 2021, 09:29 AM

Título: Codigo en CODEBLOCKS ( tampoco en DEV C ++ ) no se actualiza si cambio un valor
Publicado por: snoopty en 30 Noviembre 2021, 09:29 AM
Hola ! El siguiente Codigo que busca imprimir la Dirección de Memoria Física de una Variable al tomar el valor 80 ( ya de por sí me arroja un valor inexacto, " 0X404004 " ), si cambio 80 por cualquier otro valor siempre vuelve a imprimir " 0X404004 " =

Código (cpp) [Seleccionar]
#include <iostream>
#include <conio.h>
using namespace std;


int numero = 10;

// " * " : OPERADOR UNARIO DE INDIRECCIÓN
//       : Indica q lo q sigue a continuación es un PUNTERO
int * puntero1;


int main( )
{
// " & " : OPERADOR DE DIRECCIONAMIENTO
puntero1 = & numero; // Con " & " logramos que puntero1
                     // APUNTE A LA DIRECCIÓN DE MEMORIA FÍSICA
                     // donde se encuentre EL ÚLTIMO VALOR
                     // q se le asignó a la Variable " numero "

                     // EN ESTE EJEMPLO devolverá
                     // LA DIRECCIÓN DE MEMORIA DEL VALOR 80
                     // porque en el cout NO LE ANTEPONGO
                     // a puntero1 " * "

numero = 80;

cout << puntero1 <<endl;

getch ();
}


Gracias por leer el mensaje. Saludos !

Título: Re: Codigo en CODEBLOCKS ( tampoco en DEV C ++ ) no se actualiza si cambio un valor
Publicado por: Eternal Idol en 30 Noviembre 2021, 09:34 AM
El valor es correcto, es un puntero y por lo tanto se escribe su direccion. Pero no entiendo, eso mismo esta escrito en los propios comentarios del programa ... ¿Quien los escribio?

Código (c++) [Seleccionar]
cout << *puntero1 <<endl;
Título: Re: Codigo en CODEBLOCKS ( tampoco en DEV C ++ ) no se actualiza si cambio un valor
Publicado por: snoopty en 1 Diciembre 2021, 09:27 AM
Los comentarios los pongo yo; la Dirección de Memoria correspondiente a 80 debería de ser " 0X4b8000 " .... por otra parte, como pongo en el título, si en vez de 80, a éste lo reemplazo por 50, 30, 15, 10, etc, luego de compilar SIEMPRE ME DEVUELVE como Dirección de Memoria " 0X404004 " .... no debería a caso tener cada Número ( " Valor " en el título ) una Dirección de Memoria diferente ???
Por todo esto es que hago la consulta.
Título: Re: Codigo en CODEBLOCKS ( tampoco en DEV C ++ ) no se actualiza si cambio un valor
Publicado por: Eternal Idol en 1 Diciembre 2021, 09:50 AM
Lamentablemente solo se puede llegar a esa conclusion si uno no entiende que es un puntero. Te recomiendo leer algun libro de C++ o cuanto menos algun tutorial sobre el tema.

PD. Las direcciones de memoria - virtuales - en S.O. modernos son dependientes de muchas cosas, no deberias jamas asumir que entre una ejecucion y otra seran iguales.
Título: Re: Codigo en CODEBLOCKS ( tampoco en DEV C ++ ) no se actualiza si cambio un valor
Publicado por: snoopty en 1 Diciembre 2021, 10:02 AM
1 ) Respecto de tu PD : mi inquietud iba por otro lado; yo asumía erráticamente que cambiando los valores de una misma Variable debería de obtener diferentes Direcciones de Memoria, lo que corroboré que no es así .....
(( pero Igualmente entiendo lo que explicaste, y es altamente valorable !!!!! ))

2 ).... pues ahora con otro ejemplo he visto que la memoria direccionada a partir de un puntero " afecta " sólo a la variable, independientemente del valor que se cambie, es decir, x + q yo cambie 80 x cualquier otro valor siempre el código me devolverá la Dirección Física de la Variable; sólo en el caso de que defina otra variable global, valiéndome de un mismo puntero // no haciendo falta definir otro // direccionador para ambas variables, obtendré, ahora sí, dos Direcciones de Memoria Física diferentes ( lo constato más aún si a a ambas variables les asigno el mismo Valor )
Título: Re: Codigo en CODEBLOCKS ( tampoco en DEV C ++ ) no se actualiza si cambio un valor
Publicado por: K-YreX en 2 Diciembre 2021, 00:10 AM
Cita de: snoopty en  1 Diciembre 2021, 10:02 AM
sólo en el caso de que defina otra variable global, valiéndome de un mismo puntero // no haciendo falta definir otro // direccionador para ambas variables, obtendré, ahora sí, dos Direcciones de Memoria Física diferentes ( lo constato más aún si a a ambas variables les asigno el mismo Valor )
Sólo aclarar que la variable da igual que sea global que local.

Para entendernos, cuando tú le dices al programa "crea una variable", el programa reserva un espacio para esa variable. Cada variable podríamos decir que tiene 2 partes:
Título: Re: Codigo en CODEBLOCKS ( tampoco en DEV C ++ ) no se actualiza si cambio un valor
Publicado por: snoopty en 3 Diciembre 2021, 08:47 AM
Gracias !!!!!!!