[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