[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 20:56:06 CEST 2008


Hola David,

David Reza wrote:
> 
> Ésto por qué es así? Ayer me dí cuenta mientras checaba mi programa.
> La salida del tamaño de mi arreglo en 'main' me daba una cantidad de
> acuerdo al tipo y cantidad de elementos, pero la salida del tamaño
> del parámetro de la función, tanto si era 'int' o 'char', siempre me
> daba 4 bytes, el tamaño de un puntero.
> 

Recuerda que estamos pasando el array, o sea, la dirección de memoria 
del primer elemento. Esto significa que tenemos que copiar tal dirección 
de memoria al parámetro de la función. Por lo tanto, el "array" que 
indicaste realmente es un puntero el cual contiene la dirección de 
memoria del array original. Si no se hiciera así, entonces siempre 
obtendríamos una copia de los elementos del array, lo cual provocaría 
problemas si quisiéramos modificar tales elementos.

Por otro lado, el compilador no puede garantizar el tamaño del array de 
la función, ya que las funciones son independientes, casi atómicas. Por 
lo tanto, estaríamos creando y destruyendo arrays estáticas, lo cual no 
es posible por el diseño del lenguaje. En todo caso, serían arrays 
dinámicas, pero tampoco forma parte del diseño; si queremos hacer algo 
así, tenemos que ser explícitos.

> Me refería al hecho de si puedo mostrar la dirección a la que apunta
> mi parámetros de tipo estructura, de una forma similar a lo de los
> arreglos.
> 
> Creo que no se puede porque, como mencioné, las estructuras no
> apuntan a algo, ya que no son punteros ni arreglos (lo de que no son
> punteros lo supongo porque el tamaño de la estructura y el parámetro
> sí son del mismo tamaño, a diferencia de lo que pasó con los
> arreglos). Si estoy equivocado, espero tus aclaraciones.
> 

Exacto. Las estructuras no son punteros ni son direcciones de memoria. 
Como dije en el correo-e anterior, una estructura es un tipo "normal y 
corriente" como otros que existen. El paso por copia se mantiene y en el 
caso de estructuras, realmente se copia su contenido.

Típicamente, se pasa un puntero a la estructura inmodificable para no 
tener que estar copiando todos sus elementos cada vez que se invoque una 
función. En C++, también podemos pasar la estructura por referencia.

> Lo de los puntos de ruptura y vigilancia no es. Lo de el visualizador
> de clases es lo más probable, pero me aparecen tanto variables,
> funciones, estructuras y todo lo que haya definido antes. En éste
> caso con mi ejemplo de los problemas mencionados en éste asunto, ya
> que utilizo arreglos, funciones, estructuras y lógicamente,
> variables.
> 

Lo que mencioné en el correo-e anterior trata de la acción de 
"autocompletar código". No sé si van por ahí los tiros. Puedes mirar en 
el menú: Herramientas->Opciones del Editor. En el cuadro de diálogo, 
elige la última pestaña.


Espero haber sido de ayuda.

Steven





Más información sobre la lista de distribución Cconclase