考虑以下程序:
void f2 ( int * a, int * b) {
int c;
c = * a;
*a = *b;
*b = c;
}
int main () {
int a = 4, b = 5, c = 6;
f2 (&b, &c);
printf ("%d", c - a - b);
}
这里 和 的值b
正在c
交换。
另一个代码是:
# include <stdio.h>
void mystery (int *ptra, int *ptrb) {
int *temp;
temp = ptrb;
ptrb = ptra;
ptra = temp;
}
int main () {
int a = 2016, b=0, c= 4, d = 42;
mystery (&a, &b);
if (a < c)
mystery (&c, &a);
mystery (&a, &d);
printf("%d\n", a);
}
在这里,虽然存在相同类型的函数调用,但main()
程序中任何变量的值都不会改变。
众所周知,C 代码中没有引用调用。所以,我的问题是,虽然两个程序中都有相同类型的函数调用,那么为什么一个交换变量的值而另一个不能交换?
在第二个程序中,指针正在交换意味着地址也在交换。对??但不影响价值。在第一个程序中,地址和指针被交换,同时值也被交换。但为什么??
我也想知道,在哪里按值调用,可以改变main()程序的值(有或没有返回函数)??