没有按照我的要求执行
这个问题在这里已经有了答案:
按值传递会创建参数的副本。 这是在该功能中更改的副本
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中的传递参考
