[C con Clase] Disculpen, otra pequeña duda por hoy.

Steven Davidson srd4121 en njit.edu
Mie Nov 16 16:02:59 CET 2011


Hola Miguel Ángel,

2011/11/16 Miguel Angel Torres Fernandez-piñar <miguelangeltorresfp en gmail.com>:
>  Gracias Steven, esta me la puedes resolver otro día.....
>
> Es que realmente quería que me ayudaras con lo siguiente :
>
> Me ayuda mucho visualizar mentalmente una tabla de tres columnas, una para
> el identificador, otra para el valor y otra para la dirección de una
> variable, vaya lo normal.
>
> Un puntero me lo imagino con facilidad.
>
> Un referencia no sé cómo encajaría en esta tabla de tres columnas, o si se
> podría pensar en ella en estos términos.
>

Entendido. Pues allá va un ejemplo,

int num = 10;
int *ptr = #
int &ref = num;

y el vector descriptor, que es como se llama técnicamente "la tabla":

Dirección
de Memoria     Tipo     Nombre     Valor               Misceláneo
------------------------------------------------------------------------------------------
0x22AAFF00    int       num          10
                                  ref
 [ ref = num; ]
0x22AAFF04    int *     ptr             0x22AAFF00   [ ptr = # ]
...

Si aplicamos la implementación que seguramente hace el compilador
internamente, entonces el vector descriptor sería algo así:

Dirección
de Memoria     Tipo     Nombre     Valor               Misceláneo
------------------------------------------------------------------------------------------
0x22AAFF00    int       num          10
0x22AAFF04    int *     ptr             0x22AAFF00   [ ptr = # ]
0x22AAFF08    int *     __ptr          0x22AAFF00   [ __ptr representa
'ref', así que __ptr = # ]
...

Como dije antes, el compilador automáticamente accede al objeto
apuntado por tal puntero para implementar el concepto de la
referencia. Por ejemplo,

ref++;

realmente se traduciría como,

(*__ptr)++;


Espero que con esto se aclare mejor el tema.

Steven




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