【发布时间】:2021-12-31 08:14:32
【问题描述】:
摘自 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 编程。我遇到了这个sn-p代码,用于将整数转换为浮点数,反之亦然。我对实际发生的事情有点困惑。
这是我目前所理解的:
前几行(float f1 = 123.135, f2; 和接下来的两行)声明了变量。
然后i1 = f1; 行将123.125 的值分配给名为i1 的变量,但由于i1 是一个整数,它被截断为123。
现在,这是我的问题,在下一行 f1 = i2; 中,值 -150 被分配给名为 f1 的变量,但由于它是 float,因此该值存储为浮点数,即 -150.000000但是123.125 发生了什么?
该值是否仍然存在于计算机内存中的某处?如果是这样,我该如何访问它?就像以前将该值分配给f1 时一样,我可以将其称为f1,但现在它不再分配给任何变量,我可以以某种方式引用它吗?
就像一个更通用的版本一样,如果我们为变量分配一个新值,旧值会发生什么?
我在In python when we assign a new value to a variable what happens to the old one? 看了一眼 但是在 C 中也会发生同样的情况吗?
【问题讨论】:
-
分配给变量的内存被新值覆盖。什么不清楚?
-
将 C 变量视为临时赋予内存地址的名称*。当您分配给一个变量时,您会覆盖该地址的内容,旧值就消失了。 (*从技术上讲,情况可能并非总是如此。)
-
一个变量只能保存一个值,所以如果你给一个变量分配一个新值,旧值就没有了。
-
对于链接的 Python 问题:不,这与 C 无关。这是关于更复杂的代码和系统类型。 C 没有那里描述的功能。
-
在物理上,内存芯片在某些位置保存一些电子(1 位)或不保存它们(0 位)。当您存储新值时,电子会重新排列以保存新位。