Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
函数增加C中变量的值_C - Fatal编程技术网

函数增加C中变量的值

函数增加C中变量的值,c,C,我用PHP编写了相同的代码,5的值增加了,但是 为什么C中的值不递增 int foo(int x){ x++; } int main( ){ int y = 5; foo(y); printf("value of y = %d\n", y); } 在C语言中,传递参数是通过值而不是引用来完成的。也就是说,函数所使用的数字对于传递给的数字是唯一的,并且在内存中有自己的空间。要想避开这件事,你要做什么 int foo(int* x){ (*x)++; } in

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

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

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

在C语言中,传递参数是通过值而不是引用来完成的。也就是说,函数所使用的数字对于传递给的数字是唯一的,并且在内存中有自己的空间。要想避开这件事,你要做什么

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

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


}

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

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

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

因为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); 
}

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

一,

二,


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

如果您想避免使用指针,您也可以做如下操作

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

CPC中没有引用。C的可能副本不是PHP。关于这一点,已经有很多问题了。不仅如此,您的代码还遇到了一个问题,即在我尝试的PHP:函数中没有返回任何内容。变量不递增,输出为
5
,与C相同。它确实起作用。应该有一个变量来存储foo函数的返回值,或者可以从print函数调用该函数,该函数直接显示递增的值。
void foo(int *x)
{
    ++(*x);//this function is pass-by-reference.
}
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;
}