用于递增C中变量值的函数

时间:2017-03-19 04:38:41

标签: c

我在PHP中编写了相同的代码,5的值增加了,但是 为什么值不会在C中增加?

int foo(int x){
   x++;
}

int main( ){
   int y = 5;
   foo(y);  
   printf("value of y = %d\n", y);
}

5 个答案:

答案 0 :(得分:2)

您应该通过引用函数foo传递参数。

int foo(int *x){
   (*x)++;
}

int main( ){
   int y = 5;
   foo(&y);  
   printf("value of y = %d\n", y); 
}

答案 1 :(得分:1)

在C中,传递参数是通过值而不是通过引用来完成的。也就是说,函数使用的数字对于传递给它的数字是唯一的,并且在内存中有自己的空间。要解决这个问题

int foo(int* x){
   (*x)++;
}

int main( ){
   int y = 5;
   foo(&y);  
   printf("value of y = %d\n", y); 


}

答案 2 :(得分:1)

因为x,y是其函数的局部变量。变量的范围位于函数块内。因此,您无法从块外部更改这些变量的值。

解决方案: 要么将这些变量声明为全局变量

int y;
int foo(){
   y++;
}
int main( ){
  y = 5;
  foo();  
  printf("value of y = %d\n", y); 
}

或使用参考,你可以做到

int foo(int *x){
    (*x)++;
}

int main( ){
    int y = 5;
    foo(&y);  
    printf("value of y = %d\n", y); 
}

答案 3 :(得分:1)

可能在PHP中直接传递引用。但是C有不同的函数调用。 如果要增加函数中的值,它应该反映在main函数中。有两种可能的方式:

1

int foo(int x)
{
   return ++x; //returning the incremented value
}

2

void foo(int *x)
{
    ++(*x);//this function is pass-by-reference.
}

如果有任何问题,请告诉我。

答案 4 :(得分:0)

如果要避免使用指针,还可以执行以下操作

int addone(int n);
int main(void) {

    int n=0;
    printf("Before: %d\n", n);

    n=addone(n);//assign the returned  value from function to the variable 'n'

    printf("After: %d\n", n);

    return 0;
}

int addone(int n) {
    n++;
    return n;
}