我想知道当我们将 int 类型转换为 double 时,存储 int 的实际结果是否发生了变化或增加?因为 int 是 4 个字节(假设),当我们将其类型转换为 8 个字节(假设)的 double 时,现在大小是否也增加以存储 double 的值? 如果这是一个愚蠢的问题,请对我宽容一些?
最佳答案
转换不影响变量和相应的内存。它只是指示编译器如何解释驻留在给定位置的位。
在 Marcus 的例子中:
int i = 12;
double d = (double)i;
d
是位于全新位置的新变量。原始值 i
不受影响。但是,如果您开始玩指针,那么您必须小心:
int i = 12;
double *p = &i;
现在,如果 double
是 8 个字节宽,那么请注意,通过使用 p
,您/编译器假定它指向一个内存位置,该位置分配了 8 个字节的内存它指向的变量。然而,这是不正确的,因为实际上它指向只有 4 个字节宽的 i
(假设 int
是 4 个字节宽)。
编辑
这是一个(相对)最近的编辑,其动机是 OP 要求在评论中进行澄清。 OP 想知道:
what happens to the memory address of sum when it get typecast does now typecasted value of sum stored somewhere else in the memory
代码如下:
int sum = 17, count = 5;
double mean;
mean = (double) sum / count;
上面三行代码其实用处还挺多的。然而,这里重要的是变量 sum
根本没有被修改。它仅被用作另外的参数。为了添加两个变量,您只需要相应的值。在添加之前,编译器很可能会将这两个变量复制到寄存器中。因为您要转换为 double 型,所以编译器很可能会将 sum
的值存储在 64 位宽的寄存器中(假设 double 型是 64 位宽),仅此而已。但是,请记住,这是特定于实现的,并且会因编译器而异。这不是 C 标准指定的内容。
在这一点上,如果您想了解更多,最好编译成 Assembly 并尝试理解它。希望这对您有所帮助!
关于c - 当我们将 int 类型转换为 double 时,存储 int 的实际地址是否会发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30683190/