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

C 为什么函数不改变变量?,c,function,return,double,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

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

     #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

您没有存储返回值。更改:

get_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);
}

请注意,对于printf中的double,正确的格式说明符是%f,而不是%lf。但是,对于scanf,使用%lf是正确的。

C是传递值,这意味着该值实际上是复制进来的。因此,通过使用引用来更改值实际上不会更改原始引用

有两种解决方法:

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);
}

按预期工作:局部变量/函数参数无法在函数返回后继续存在;对x的值没有影响。顺便说一句,原来的双get_lengthdouble a有点滑稽:它本质上要求调用方初始化函数的局部变量double a。@Joker_vD:是的,以牺牲很多奇怪的东西为代价保存了一行源代码。
get_length(&length)
...
double get_length(double *length)
{
    printf("What is the rectangle's length?\n");
    scanf("%lf", length);
}