Una variable es una construcción lógica que va a la intención de un algoritmo, mientras que una ubicación de memoria es una construcción física que describe el funcionamiento de una computadora. En términos generales, para ejecutar un programa hay un mapeo (generado por el compilador) entre la noción lógica de una variable y el almacenamiento de la computadora.
(Incluso en lenguaje ensamblador tenemos una noción de variables (lógicas) que van a algoritmo e intención, y ubicaciones de memoria (física), aunque están más combinadas en ensamblador).
Una variable es un concepto de alto (er) nivel. Una variable representa una asignación desconocida (como en matemática o programación) o un marcador de posición que puede sustituirse con un valor (como en programación: parámetros).
Una ubicación de memoria es un concepto de nivel bajo (er). Se puede usar una ubicación de memoria para almacenar un valor, a veces, para almacenar el valor de una variable. Sin embargo, un registro de CPU es otra forma de almacenar el valor de algunas variables. Los registros de la CPU también son ubicaciones de almacenamiento de nivel bajo (er), pero no son ubicaciones de memoria ya que no tienen direcciones, solo nombres.
En cierto sentido, una variable es un mecanismo de abstracción para expresar la intención del programa, mientras que una ubicación de memoria es una entidad física del entorno de procesamiento que proporciona almacenamiento y recuperación.
Pregunta 003: ¿Es cierto que un puntero está almacenado dentro de la ubicación de memoria 0x23452? ¿Por qué?
No podemos decir con certeza. El hecho de que haya un valor allí que funcione como una dirección, no significa que sea esa dirección, sino que podría ser el entero (decimal) 144466. No podemos hacer suposiciones sobre la interpretación de valores simplemente basados en cómo aparecen numéricamente.
Pregunta 004: ¿Es cierto que un puntero está almacenado dentro de la ubicación de memoria 0x23452? ¿Por qué?
Esta es de hecho una pregunta extraña. Esperan algunos supuestos basados en los cuadros, sin embargo, tengamos en cuenta que las direcciones aumentan en 1 para cada cuadro. En cualquier computadora moderna, eso significaría que cada caja puede contener un byte a direccionamiento byte ha sido la norma durante décadas. Sin embargo, un byte tiene solo 8 bits y puede variar de 0 a 255 (para valores sin signo); Sin embargo, muestran un valor mucho mayor almacenado en una de estas direcciones, por lo que es muy sospechoso. (Esto podría funcionar si se tratara de una máquina dirigida por palabras, pero no dice eso, y pocas máquinas lo son hoy, aunque algunas máquinas educativas lo son).
Basado en las cuatro tarjetas que les he mostrado a todos, definiría los punteros de una manera ligeramente diferente:
Un puntero es una ubicación de memoria cuyo valor es la dirección de memoria de otra ubicación de memoria.
Si bien hay situaciones en las que este pensamiento es correcto, aquí estás mezclando metáforas. La noción de una variable va al algoritmo y su intención: no es necesario suponer que todas las variables tienen ubicaciones de memoria. Algunas variables (especialmente las matrices) tienen ubicaciones de memoria porque las ubicaciones de memoria admiten el direccionamiento (mientras que los registros de la CPU solo se pueden nombrar sin indexar).
Para la ejecución, hay un mapeo lógico entre variables y declaraciones y ubicaciones de memoria del procesador y secuencias de instrucciones del procesador. Una variable cuyo valor nunca cambia (por ejemplo, una constante) ni siquiera requiere necesariamente una ubicación de memoria, ya que el valor puede reproducirse a voluntad (por ejemplo, según sea necesario para las secuencias de código generadas por el compilador).
a
,0x23453
.nil
etc. cosas dentro de ellos son los valores. Puede parecer obvio para usted, pero no me sentiría cómodo dando respuestas decisivas a esas preguntas sin ver cómo se definen esos campos. Realmente no hay forma de saber sia
en la segunda imagen hay un carácter, una cadena (si son diferentes) o el nombre de una variable. Si es una cadena, entoncesnil
también es una cadena? ¿O un valor "nulo"?