我在PHP中编写了相同的代码,5的值增加了,但是 为什么值不会在C中增加?
int foo(int x){
x++;
}
int main( ){
int y = 5;
foo(y);
printf("value of y = %d\n", y);
}
答案 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;
}