2013-02-10 59 views
1

这是一个更大的东西的测试用例,这就是为什么它的写法是。我怎么能做这么一点代码,使a的值不断增加?在我的项目中,我调用了一个函数来解析文件中的一行。我需要将结构的值设置为在函数调用中设置的某些值(函数的参数已在主函数中初始化,如下面的代码所示)。更改函数中某个东西的值

int increment(int a) 
{ 
    a++; 
    return 0; 
} 
int main() 
{ 
    int a =0; 
    int b =0; 
    while(b<5){ 
     increment(a); 
     b++; 
     cout << "a is: " << a << ". And b is: " << b << "\n"; 
    } 
    system("PAUSE"); 
} 

谢谢。

+0

在许多情况下,您最好返回递增值,如'int increment(int a){return a + 1;}'。你称之为“a =增量(a)”。 – dasblinkenlight 2013-02-10 01:22:39

回答

3

传递它的地址递增

void increment(int *a){ 
    (*a)++; 
} 
increment(&a); 
//Using the address of operator pass in the address of a as argument 
+0

@Lewis Therin这不仅仅是增加指针;不是价值? – 2013-02-10 01:31:37

+0

@RichardSchneider运算符优先级?你可能是对的,我还没有做过C的年龄。我已经明确表示了括号。 – 2013-02-10 01:34:32

-1

你是按值传递a,所以a值永远不会改变。

一种解决方案是:

int increment (int a) { return a + 1; } 
在循环

然后:

a = increment(a); 

另一种解决方案是通过引用传递a(指针)

void increment (int *a) { *a = *a + 1; } 

,并在环

increment(&a); 
+0

增量的第二个版本是错误的,现在已经更新了它。 – 2013-02-10 01:29:43

1

您可以使用指针:有关类似问题,请参阅Passing by reference in C

另外,你可以只修改递增函数返回的增加后的值,并把它在主如下所示:

A =增量(一);

0

,你可以:

  • 声明static int a = 0;return a++;
  • 更改签名int increment(int* a)return *a++;
  • 在同一个源文件的文件范围内声明a作为increment()
  • a全球
  • 在C++中执行此操作,并通过r传递a eference