如果我们给一个变量赋一个新值,旧值会发生什么变化? (在 C 中)

If we assign a new value to a variable, what happens to the old value ? (in C)

来自书籍:Stephen G Kochan 的“C 语言编程(第 4 版)”

// Basic conversions in C

#include <stdio.h>

int main (void)
{
    float  f1 = 123.125, f2;
    int    i1, i2 = -150;
    char   c = 'a';

    i1 = f1;                 // floating to integer conversion
    printf("%f assigned to an int produces %i\n", f1, i1);

    f1 = i2;                 // integer to floating conversion
    printf("%i assigned to a float produces %f\n", i2, f1);

    f1 = i2 / 100;           // integer divided by integer
    printf("%i divided by 100 produces %f\n", i2, f1);

    f2 = i2 / 100.0;           // integer divided by a float
    printf("%i divided by 100.0 produces %f\n", i2, f2);

    f2 = (float) i2 / 100;     // type cast operator
    printf("(float) %i divided by 100 produces %f\n", i2, f2);
    return 0;
}

我是编程新手,我想从上面提到的书中学习如何用 C 编程。我遇到了这段代码,用于将整数转换为浮点数,反之亦然。我对实际发生的事情有点困惑。

这是我目前的理解: 前几行(float f1 = 123.135, f2; 和接下来的两行)声明变量。

然后行 i1 = f1;123.125 的值分配给名为 i1 的变量,但是由于 i1 是一个整数,它被截断为 123 .

现在,这是我的问题,在下一行 f1 = i2; 中,值 -150 被分配给名为 f1 的变量,但由于它是 float,值存储为浮点数,即 -150.000000 但是 123.125 发生了什么?

该值是否仍然存在于计算机内存中的某处?如果是这样,我该如何访问它?就像以前将该值分配给 f1 时一样,我可以将其称为 f1 但现在它不再分配给任何变量,我可以以某种方式引用它吗?

就像更通用的版本一样,如果我们为变量分配一个新值,旧值会发生什么变化?

我看过 但在 C 中是否也会发生同样的情况?

在C语言中,变量是一个名字,用来让一块内存更容易使用。当你给变量赋值时,这个值被存储到变量名对应的一块内存中。

这意味着在将新值存储到变量中时,旧值将被覆盖,因为变量仍然引用同一块内存。通常,不会以任何方式保留第一个值以供以后访问。

现在有一些“奇特”的做事方式可能无法使此声明 100% 正确。有一些写时复制系统(其中一些是用 C 实现的)在写入新值时会保留旧值(一般意义上)。但是,大多数 C 程序中甚至不存在这些类型的系统,如果您使用过,您就会知道。

Does that value still exist somewhere in the computers memory ?

一般的回答是:不,一旦您将新值分配给变量,旧值就会消失,因此您无法访问它。

也就是说...

根据您的编译器,初始化程序(如您的 123.125)可能是程序内存的一部分,因此该值可能仍在内存中的某个位置。但是,这并不重要,因为您不知道在哪里,因此无法访问它。所以对于任何实际用途,它都没有了......

每当你创建一个变量并为其赋值时,它就会存储在内存中,但是当我们更改变量的值时,我们基本上是用新值替换它value.so旧值会从内存中删除

变量就像一个值的占位符。如果您为变量分配一个新值,则意味着您用新值覆盖旧值,旧值将永远消失。