不能取类型'浮动'的右值的地址

时间:2017-10-27 12:41:09

标签: c pointers cs50

所以我不熟悉编码,并尝试在C中创建一个程序,在那里我输入一个浮点值,它返回表示该值所需的最小硬币数。但我不断收到此错误消息:

  

c:16:19:错误:不能取类型'浮点

的右值的地址      

printf("%f", & change(f) );

#include <stdio.h>
#include <cs50.h>

float change(float n);

int main(void) {
    float f;
    do {
        f = get_float();
    } while (f < 0);

    change(f);
    printf("%f", &change(f));
}

float change(float n) {
    float pennies = 0.01;
    float nickles = 0.05;
    float dimes = 0.1;
    float quarters = 0.25;
    float coins = 0;

    do {
        n = n - quarters;
        coins++;
    } while (n >= quarters);

    do {
        n = n - dimes;
        coins++;
    } while (n >= dimes);

    do {
        n = n - nickles;
        coins++;
    } while (n >= nickles);

    do {
        n = n - pennies;
        coins++;
    } while (n != 0);

    return coins;
}

2 个答案:

答案 0 :(得分:1)

我在C上生锈了,但在这里我认为正在发生。有左值和右值。

int a = 5;

在这一行a是左值,5是左值。您只能获取左值而不是左值的地址。 当你致电change(f)时,你会得到一个自己的左值,你可以将其分配给左值,如

float ff = change(f);

现在您可以获取ff的地址。 所以要么像@mco建议的那样尝试(如果你想打印实际值),要么你真的想要地址做这样的事情

float ff = change(f);
printf("%i", &ff);

我将%f更改为%i,因为将地址打印为float几乎没有意义。

答案 1 :(得分:0)

格式change(f)采用浮点数参数,因此您可以将printf返回的数字作为第二个参数传递给printf ("%f", change(f));

change(f)

表达式的临时结果(如&)是rvalues,它们没有可由Date

访问的内存位置