[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