[C con Clase] Mostrar la dirección de memoria a la que apunta un parámetro.
Steven Davidson
srd4121 en njit.edu
Jue Jul 24 10:23:47 CEST 2008
Hola David,
David Reza wrote:
> Tengo una arreglo que paso por parámetro a una función (mediante otro
> arreglo, no mediante un puntero), y me gustaría saber cómo puedo
La verdad es que internamente el parámetro de la función es un puntero,
tanto si escribes que es un array como si no.
> mostrar desde mi función, la dirección de memoria a la que apunta el
> parámetro, que es un arreglo.
>
> Pude hacerlo con arreglos de tipo 'int':
>
>
> int nArreglo[10];
>
> /*Funcion*/
> void Funcion ( int ParamArreglo[] )
> {
> cout << "Dirección de memoria del parámetro: " << &ParamArreglo << endl
> << "Dirección a la que apunta el parámetro: " << ParamArreglo;
> }
>
>
> Pero a la hora de utilizar un arreglo de tipo 'char', la dirección de
> memoria del parámetro me la muestra correctamente, pero para la
> dirección a la que me apunta, como era de esperarse, me muestra la
> cadena que se encuentra en el arreglo. Sabía de antemano que ésto iba
> a suceder pero quisiera saber de qué manera se podría hacer para que
> me muestre lo que quiero, tal vez con algún casting, pero pregunto
> por si hay otra forma.
>
Esto es porque 'cout <<' tiene una funcionalidad particular para 'char
*' y otra diferente para 'void *'. Por lo tanto, como bien dices,
necesitas realizar un cásting a 'void *'. Por ejemplo,
char szCad[32];
...
cout << (void *)szCad << endl;
> Lo mismo estoy probando con una estructura pasada por parámetro
> mediante otra estructura, o lo que creo que es lo mismo, por
> valor/copia. Pero creo que aquí de plano no se puede porque las
> estructuras no apuntan a direcciones de memoria o a otras
> estructuras.
>
Sí puedes pasar estructuras por parámetro, como cualquier tipo de dato.
Efectivamente, la información se pasa por copia (o por valor) al
parámetro de la función.
> Muy aparte de esta duda, tengo una duda sobre mi IDE, Dev C++. Desde
> ayer me dí cuenta que si escibo un punto y la flecha hacia arriba o
> si escribo un punto y lo borro (ésto es pocas veces, no siempre), me
> sale un recuadro pequeño que tiene cuadros rojos y azules y dicen
> Variable, Functionm, Class, etc, dependiendo de lo que tenga definido
> antes.
>
Me temo que no te puedo ayudar en este aspecto. Es posible que hayas
creado puntos de ruptura y de "vigilancia" cuando uses el depurador.
Otra posibilidad es que tienes habilitado el visualizador de clases.
Básicamente, el entorno tiene en cuenta todos los miembros de las clases
existentes. Cuando accedas a un miembro, te aparece una lista de
posibles miembros para elegir el que quieres.
Espero que todo esto te ayude.
Steven
Más información sobre la lista de distribución Cconclase