【问题标题】:Getting a sub-function to modify variables获取子函数来修改变量
【发布时间】:2013-09-30 10:36:06
【问题描述】:

这是一个简单的测试程序,我试图让 func 函数修改变量 a 和 b,然后在主函数中使用它们。有没有办法让 func 返回修改后的变量以便可以使用它们? (最好不使用 struct,因为我不明白它是如何工作的)

#include <stdio.h>

void func(int a, int b)
{
    a=a+1;
    b=b+1;
}

void main(void)
{
    int a=0, b=0;
    while (1)
    {
        func(a,b);
        printf("%d\n",a);
    }
}

【问题讨论】:

标签: c pointers


【解决方案1】:

如果你想修改调用函数中的变量,你必须将它们的地址传递给func(即传递一个指向这些变量的指针

void func(int* a, int* b)
{
    *a=*a+1;
    *b=*b+1;
}

func(&a,&b);

您的代码按值传递其参数。这意味着 ab 被复制到新变量中,这些变量使用调用变量的值进行初始化,但仅在 func 的持续时间内存在。

【讨论】:

  • +1 请扩展答案以解释OP的代码具有变量的本地副本
【解决方案2】:

我同意。最好的方法是使用pointers。但是你知道你的代码永远不会终止吗?您应该使用可以结束 while 循环执行的条件。

另外,如果您想对两个变量执行完全相同的操作,您可以使用如下的 return 语句:

#include <stdio.h>
void func(int a, int b)
{
    return a+1;
}

void main(void)
{
    int a=0, b=0;

    while (a < 5)
    {
        func(a);
        func(b);
        printf("%d\n",a);
    }
}

【讨论】:

    【解决方案3】:

    我们可以通过指针来实现。不要使用 While(1),因为它会进入无限循环。我认为以下程序对您有所帮助。

      #include <stdio.h>
    
        void func(int* a, int* b)
        {
        *a=*a+1;
        *b=*b+1;
        }
    
        void main(void)
        {
        int a=0, b=0;
        //while (1)
        //    {
            func(&a,&b);
            printf("%d\n",a);
          //  }
        }
    

    【讨论】:

      猜你喜欢
      • 2017-01-06
      • 1970-01-01
      • 2018-10-06
      • 2012-01-15
      • 1970-01-01
      • 1970-01-01
      • 2019-12-05
      • 2015-11-11
      相关资源
      最近更新 更多