在unsigned int的位置存储double值

时间:2014-02-27 06:34:22

标签: c

请参阅该计划中的以下几行:

if (ftPtr) {
    *ftPtr = feet;
}

请注意feet double包含modf()值。另一方面,ftPtrunsigned int变量的地址。

问题 现在这个程序在没有任何警告的情况下运行良好,但是在我的口中留下了一个不好的味道,即将双值分配给int变量。是否使用C中的地址 kosher 为int变量赋值为double?

#include <stdio.h>
#include <math.h>

void metersToFeetAndInches(double meters, unsigned int *ftPtr, double *inPtr) {
    double feet;
    double inches;

    double rawFeet = meters * 3.281;

    inches = modf(rawFeet, &feet);

    if (ftPtr) {
        *ftPtr = feet;
    }

    if (inPtr) {
        *inPtr = inches;
    }
}

int main(int argc, const char * argv[])
{
    double meters = 1.80;
    unsigned int feet;
    double inches;

    metersToFeetAndInches(meters, &feet, &inches);
    printf("%.2f meters is %d feet and %.2f", meters, feet, inches);
    return 0;
}

3 个答案:

答案 0 :(得分:4)

是的,这很好。

首先将double转换为unsigned int,然后将其存储。就像你写的那样:

if (ftPtr) {
    *ftPtr = (unsigned int)feet;
}

答案 1 :(得分:1)

指针只是一个地址:

char pointer可以指向数据块,可以是任何内容(intcharlongdouble)。但是当您打印它时,您将只看到该数据类型中可包含的数据。 即在这种情况下,如果char指针指向int,则只会打印1st byte的{​​{1}}。没有伤害。

但这不合适,不是你所期望的。

答案 2 :(得分:0)

您可以在unsigned int中存储double,但大小不同。 虽然sizeof(unsigned int)在32位系统中是4,但sizeof(double)是8.所以你可以在4字节长的空间中存储一个8字节长的值,但是可能会丢失数据(上面的4个可以是修剪原来的双倍值。)