没有按照我的要求执行
这个问题在这里已经有了答案:
按值传递会创建参数的副本。 这是在该功能中更改的副本
void add(int x){
x = x+1;
}
因此,您所做的更改是针对副本而不是main
范围中的变量(您期望看到更改)。
如果您想通过将参数作为参数传递来更改函数中的变量,则不能通过值传递。 你可以改变你的函数来传递像这样的指针
void add(int* x){
*x = *x + 1;
}
并将整数的地址传递给像这样的函数
int y=3;
add(&y);
在main()
指针仍然按值传递,因此它是正在执行的指针的副本,但这并不重要,因为您不改变指针本身,您正在更改它指向的变量的值。
这个功能:
void add(int x) {
x = x + 1;
}
基本上这样说:创建一个名为add
的函数,它返回nothing( void
),并且接受一个整数参数x
。 然后你调用这个函数:
y = 3;
add(y);
这说“将名为y
的变量设置为3.现在调用add()
函数作为参数传递y
的当前值,即3。
add(3);
参数x
对函数add()
完全是本地的。 它只存在于函数内部,并不影响它之外的任何东西。
所以你的职能会尽职尽责地给你提供的数字加1,然后把它扔掉。 就像你告诉它的那样。
与其他语言一样,C没有“通过引用传递”,在这种情况下,您可以告诉函数对变量本身而不是其当前值进行操作。 但是,它确实有指针,可以完成类似的事情。
C中的所有函数参数都是按值传递的。 这意味着参数(在这种情况下,在add
定义的x
)被初始化为参数值的一个副本(在这种情况下, y
的值为3
)。
由于x
是一个局部变量,正在执行
x = x + 1;
更改x
的值,但该函数返回后x
不再有效, x
不再存在。
请注意,参数不一定是变量的名称。 你可以像这样合法地调用你的函数:
add(42);
x
被初始化为42
- 但x = x + 1
肯定不会改变42
的值。
如果要修改该值,可以让该函数返回新值:
int add(int x) {
return x + 1;
}
调用者可以对结果进行任何操作,包括将其分配回变量:
int y = 3;
y = add(y);
或者你可以传递你想修改的对象的地址:
int add(int *x) {
*x = *x + 1;
}
然后调用者可以这样做:
int y = 3;
add(&y);
这仍然是按值传递的,但传递的值是一个指针值,即x
的地址。 这就是我们如何模仿C中的传递参考