0

从函数返回后(即在调用函数中)有什么方法可以访问函数参数?

例子:

void add (float a , float b) {
    int c;
    c=a+b;
    return c;
}

void main () {

    add (3,4);

    if (a <4 && b<3) // a and b are variable in add functions
        printf("a is 4 and b is 3");
}
4

6 回答 6

2

一旦执行离开函数,就无法再访问参数。您需要将它们临时存储在调用函数中才能再次访问它们:

int main ()
{

    float a = 3.0f, b = 4.0f;
    add (a, b);

    if (fabs(a - 4.0f) < 0.005f && fabs(b - 3.0f) < 0.005f) // a and b are now local variables
        printf("a is 4 and b is 3");
}

有关更多信息,请参阅变量的范围与生命周期。

其他几件事:

  1. 的返回类型main应该是int.
  2. 您正在检查a < 4 && b < 3是否a等于 4 和b等于 3,这是不对的。
  3. 您应该养成不检查浮点值是否相等的习惯。最好检查它们是否彼此靠近。
  4. 您的add函数应该有一个非 void 返回类型,可能是float. (帽子提示:@ajp15243)
  5. 虽然不是非法的,但以某种方式使用函数的返回值是正常的。
于 2013-11-13T15:00:20.670 回答
1

退出函数时,局部变量a 和 b 被销毁,所以 - 不,你不能这样做。

此外,您定义addvoid, 虽然它应该是int(因为它显然返回c)。

于 2013-11-13T15:00:09.267 回答
0

有什么方法可以使用函数中定义的变量的值在程序中调用

不是你写的那样

如果您现有的代码(在原始帖子中)通过以下方式修改,是否更有意义:
1)add()函数的返回类型必须是浮点数
2)main()中,没有理由进行测试a,并且b它们不在范围之外add()功能。
3)add()在 printf 语句中使用函数的结果来查看结果。
4) 不是绝对要求,但建议最小原型为main()5 int main(void)
) 如果您在文件顶部的任何函数之外的某处创建了浮点数的副本,那么它们的范围将允许您在main(). 但它创建与同一文件中函数中使用的参数名称相同名称的全局变量 不是一个好习惯。

(有关解释,请参阅行内注释)

float add (float a , float b) {//must return float, you already have a return statement
    float c;//from int to float (because that matches the argument types being evaluated)
    c=a+b;
    return c;
}

float x = 5.0; //these are variables with global scope, meaning they exist and can be  used in every function
float y = 7.2;

int main (void) {//change from void main() to int main(void)
    float z=0;

    z = x + y;//legal statement summing globals x & y and storing in local z 

    //add (3,4);//used in printf below

    //if (a <4 && b<3) // a and b are variable in add functions (this is meaningless in context of an add function

    //call the add() function, with float arguments, from here, and print out the results in one step.   
    printf("results of add are: %f", add(3.0,4.0));//change from 3 to 3.0 (just to be anal)
}
于 2013-11-13T15:27:49.207 回答
0

不。

您需要了解范围存储

于 2013-11-13T15:00:35.593 回答
0

您可以让函数返回变量,只需将“void”一词更改为要返回的变量。所以对于你的情况:

void add (float a, float b)

将会

int add (float a, float b)

因为看起来你想返回一个 int 变量,但我认为如果你只让返回变量是一个浮点数会更好。

于 2013-11-13T15:01:10.050 回答
0

我不是 C 程序员,但不管是哪种语言,我认为你目前的努力有点误导。不要太拘泥于您使用的语言,专注于编写结构良好的代码,因为许多概念超越了特定语言。今天的大多数语言都被认为是“Turning Complete”,基本上意味着你可以用一种语言写出你可以用另一种写出的东西。

话虽如此,您有一个 add 函数,它接受两个参数,然后将这两个参数相加并返回值。您传递的那些参数的范围在 add 功能块内。它们仅作为您在实际调用函数时传入的参数的参考,就像您执行 add(4, 3) 一样。

因此,您可以在 add 函数中移动 if 条件语句,就像我在调用 add 函数时所说的那样,参数将具有值,您可以检查它。

这就是为什么你可以说 a + b。因为当您调用 add 时,这些变量就是您传递给函数的内容。希望这是有道理的。快乐编码!

于 2013-11-13T15:20:49.863 回答