c - 当我们将 int 类型转换为 double 时,存储 int 的实际地址是否会发生变化?

标签 c casting

我想知道当我们将 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/

相关文章:

c - 变量地址之间的差异

C编程: Error in writing values of a particular column from a file to another file

java - Java中如何保证运行时参数化类型的正确性?

java - 在 print 语句中使用类型转换运算符

java - 将对象列表转换为接口(interface)列表时出错

c++ - 连续应用两个显式类型转换的原因是什么?

c - 是否可以为规则设置优先级以避免 "longest-earliest"匹配模式?

c - 为函数中的结构分配内存,该函数返回指向结构的指针

c - 如何在c中比较2个整数的数字(没有数组和字符串)

java - 方法引用转换如何工作?