Buscamos por diferentes foros para así tenerte la respuesta a tu dilema, si tienes alguna duda deja tu duda y respondemos con gusto.
Solución:
Tu entendimiento es completamente erróneo.
Cuando escribes int x = 4;
la x
representa una ubicación de memoria real en la pila, que luego se llena con el valor 4
. x
está irrevocablemente vinculado con ese pedazo de memoria – cuando x
sale fuera de alcance la memoria también desaparece.
Cuando escribes int y = x;
otra vez y
representa una pieza real de la memoria. No ‘se refiere’ a x
en cambio, el contenido de x
son copiado dentro y
.
¿Es lo mismo para todos los idiomas?
No, diferentes idiomas pueden tener y tienen semánticas completamente diferentes. Sin embargo, la forma en que lo hace C generalmente se llama semántica de valor.
y
nunca referencias x
. El operador de asignación, =
copia valores. x
es solo un valor de 4
de int
escribe. int y = x
está asignando el valor actual de x a y, copiándolo en el proceso.
Para comportarse como usted está describiendo, y
tendría que ser un puntero a un int, int *
y se le asignaría la dirección de x
al igual que:
#include
int main(int argc, char *argv[])
int x = 4;
int *y = &x;
printf("before: x: %d, y: %dn", x, *y);
x = 123; // modify x
printf("after: x: %d, y: %dn", x, *y);
X ahora hace referencia a la ubicación de la memoria donde se almacena el ‘4’
No, 4 no está almacenado en ningún lado, es un parámetro para un mov
. x
tiene su propia ubicación de memoria que contiene un valor entero, en este caso 4.
y referencias x
No, y
también tiene su propia ubicación de memoria que almacena un número entero, también en este caso 4.
Entonces, ¿por qué cuando cambio el valor de x, por ejemplo, x = 6, y no cambia?
Ambos son ubicaciones de memoria diferentes, cambiar uno no tiene impacto en el otro.
Calificaciones y reseñas
Tienes la opción de añadir valor a nuestro contenido informacional asistiendo con tu veteranía en las notas.