gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 17:02:56 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com