为什么函数不会改变变量?

时间:2013-10-20 22:08:21

标签: c function return double

在这段代码中我似乎得到零,我不太熟悉为什么我不能用我创建的函数改变变量长度。任何帮助都可能有用。

     #include <stdio.h>
double get_length(double a);
int main(int argc, char* argv[])
{
    double length = 0;
    get_length(length);
    printf("%lf", length);
    return 0;
}
double get_length(double a)
{
    printf("What is the rectangle's length?\n");
    scanf("%lf", &a);
    return a;
}

打印时,返回0.0000

2 个答案:

答案 0 :(得分:6)

您没有存储返回值。变化:

get_length(length);

为:

length = get_length(length);

执行此操作时无需通过length

另一种方法是传递一个地址:

#include <stdio.h>

void get_length(double * a);

int main(int argc, char* argv[]) {
    double length = 0;
    get_length(&length);
    printf("%f", length);
    return 0;
}

void get_length(double * a) {
    printf("What is the rectangle's length?\n");
    scanf("%lf", a);
}

请注意,%f,而不是%lf,是doubleprintf()的正确格式说明符。但是,%lf使用scanf()是正确的。

答案 1 :(得分:3)

C是&#34;按值传递&#34;,这意味着该值实际被复制。因此,使用引用更改值并不会实际更改原始引用。

有两种解决方法:

1)存储到本地值,然后捕获返回值:

length = get_length()
...
double get_length()
{
    double a;
    printf("What is the rectangle's length?\n");
    scanf("%lf", &a);
    return a;
}

2)传递一个指针:

get_length(&length)
...
double get_length(double *length)
{
    printf("What is the rectangle's length?\n");
    scanf("%lf", length);
}