从函数返回后是否可以访问函数参数?

时间:2013-11-13 14:54:10

标签: c parameters scope

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

示例:

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

6 个答案:

答案 0 :(得分: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");
}

有关详细信息,请参阅Scope vs. Lifetime of Variable

其他一些事情:

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

答案 1 :(得分:1)

退出函数时,

局部变量 a和b将被销毁,所以 - 不,你不能这样做。

此外,您将add定义为void,而它应该是int(因为它显然会返回c)。

答案 2 :(得分:0)

没有

您需要了解scopestorage

  • 函数中定义的变量的范围仅限于该函数。
  • 函数中声明的变量存储在与函数调用对应的stack帧中,所有这些变量在函数返回时被销毁。

答案 3 :(得分:0)

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

void add (float a, float b)

将是

int add (float a, float b)

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

答案 4 :(得分:0)

我不是C程序员,但不管语言如何,我认为你目前的努力有点误导。不要过于关注使用哪种语言专注于编写结构良好的代码,因为许多概念超越了特定的语言。今天的大多数语言都被认为是“完成翻译”,基本上意味着你可以用另一种语言写作。

据说你有一个add函数,它接受两个参数,然后添加这两个参数并返回值。您传递的那些参数在添加功能块中作用域。它们只是你实际调用函数时传入的参数的引用,就像你添加的那样(4,3)。

所以你可以移动你的if条件语句添加函数原因就像我说的那样当你调用你的add函数时,参数会有值,你可以检查它。

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

答案 5 :(得分:0)

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

不是你写的方式

如果您的现有代码(原始帖子)以下列方式进行修改,那会不会更有意义:
1) add()函数的返回类型必须为float 2) main()中,没有理由对ab进行测试,它们不在 add()以外的add() 。{。} 3) 在printf语句中使用main()函数的结果来查看结果。
4) 绝对要求,但建议int main(void)的最低原型为main()
5) IF 您已在任何功能之外的某处创建了一个浮动副本,位于文件顶部,然后他们的范围允许你在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) } 中使用它们。但是 不是良好的做法 来创建与同一文件中的函数中使用的参数名称相同的全局变量。

(请参阅内联评论以获得解释)

{{1}}