函数内部的简单计算

时间:2014-05-16 01:46:12

标签: c

我试图在功能中进行计算,但我不确定它为什么不起作用:

int calculate(int x){
  x = x + 2;
  return x;
}

int main(){
  int x = 0;
  int i;

  for(i=0;i<10;i++){
    calculate(x);
  }

  printf("i = %d, x = %d\n", i, x); 
}

我知道每次通过函数时x都是0。但是我该如何解决呢? 据说我应该返回10,x应该返回20.

7 个答案:

答案 0 :(得分:2)

您实际上可以传递要更改的整数的指针,而不是值本身。在这种情况下,新的(增加的)整数将存储在范围的原始级别(实际上位于完全相同的内存点),在此处定义它,在这种情况下是您的main函数。所以你的代码应该是这样的:

void calculate(int *x)
{
    *x += 2;
}

int main(void)
{
    int x = 0;
    for (int i=0; i<10; i++)
    {
        calculate(&x);
        printf("i=%d, x=%d\n", i, x);
    }
    return 0;
}

<强> 输出:

i=0, x=2
i=1, x=4
i=2, x=6
i=3, x=8
i=4, x=10
i=5, x=12
i=6, x=14
i=7, x=16
i=8, x=18
i=9, x=20

答案 1 :(得分:1)

变量可以相互影响。你不必确保你永远不会在其他任何地方使用i,因为害怕在for循环中弄乱i,因为新的范围会获得相同的新副本名称(比如两个不同的人有相同的名字)。

要解决此问题,您可以从计算功能中返回值。我将其命名为x2,以便将其与原始x明确区分开来:

int calculate(int x2){
  x2 = x2 + 2;
  return x2;
}

int main(){
  int x = 0;
  int i;

  for(i=0;i<10;i++){
    x = calculate(x);
  }

  printf("i = %d, x = %d\n", i, x); 
}

答案 2 :(得分:0)

如果要更改x,则需要通过引用而不是按值传递它。

void calculate(int *x){
  *x = *x + 2;
}

int main(){
  int x = 0;
  int i;

  for(i=0;i<10;i++){
    calculate(&x);
  }

  printf("i = %d, x = %d\n", i, x); 
}

答案 3 :(得分:0)

您按值传递x,因此calculate仅更改本地副本。当calculate返回时,结果将丢失。您需要从calculate返回修改后的值,并将其分配给main

中的内容

答案 4 :(得分:0)

您正在传递x作为值(即复制它)。因此x函数中的calculate与其外的x不同。因此,当您更改其值时,更改不会反映在x中的main

以下情况更可取。请注意,您需要return计算函数中的值,然后将其返回的值分配给某个值。

int calculate(int x){
  return x + 2;             /* CHANGED */
}

int main(){
  int x = 0;
  int i;

  for(i=0;i<10;i++){
    x = calculate(x);       /* CHANGED */
  }

  printf("i = %d, x = %d\n", i, x); 
}

答案 5 :(得分:0)

变化:

for(i=0;i<10;i++){
    calculate(x);
}

为:

for(i=0;i<10;i++){
    x = calculate(x);
}

您的函数返回一个值,因此您需要将其存储在某处。

答案 6 :(得分:0)

在这个功能中,你可以改变一件事,并且iguess它会起作用

Int calculate(int&amp; x)

并保持休息其他事情 基本上你可以使用“别名”