如果我们给一个变量赋一个新值,旧值会发生什么变化? (在 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旧值会从内存中删除
变量就像一个值的占位符。如果您为变量分配一个新值,则意味着您用新值覆盖旧值,旧值将永远消失。
来自书籍: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语言中,变量是一个名字,用来让一块内存更容易使用。当你给变量赋值时,这个值被存储到变量名对应的一块内存中。
这意味着在将新值存储到变量中时,旧值将被覆盖,因为变量仍然引用同一块内存。通常,不会以任何方式保留第一个值以供以后访问。
现在有一些“奇特”的做事方式可能无法使此声明 100% 正确。有一些写时复制系统(其中一些是用 C 实现的)在写入新值时会保留旧值(一般意义上)。但是,大多数 C 程序中甚至不存在这些类型的系统,如果您使用过,您就会知道。
Does that value still exist somewhere in the computers memory ?
一般的回答是:不,一旦您将新值分配给变量,旧值就会消失,因此您无法访问它。
也就是说...
根据您的编译器,初始化程序(如您的 123.125)可能是程序内存的一部分,因此该值可能仍在内存中的某个位置。但是,这并不重要,因为您不知道在哪里,因此无法访问它。所以对于任何实际用途,它都没有了......
每当你创建一个变量并为其赋值时,它就会存储在内存中,但是当我们更改变量的值时,我们基本上是用新值替换它value.so旧值会从内存中删除
变量就像一个值的占位符。如果您为变量分配一个新值,则意味着您用新值覆盖旧值,旧值将永远消失。