我必须在这里做一些极其愚蠢的事情,但我无法弄清楚是什么。如果我在foo函数中打印了这些值,它会显示正确的值。
但如果我尝试在main中打印它们,我会得到无意义的结果(分别为0和1)。
void foo(int a, int b){
a = 1;
b = 2;
}
int main(void){
int a;
int b;
foo(a, b);
printf(“%i \n”, a);
printf(“%i \n”, b);
}
答案 0 :(得分:5)
你需要改变你的foo方法来指点:
void foo(int *a, int *b)
{
*a = 1;
*b = 2;
}
然后你对foo的调用必须改为:
foo(&a, &b);
这基本上说:将'a'和'b'的地址传递给函数foo,这样它就能够改变它们的值。
您之前的代码只是将'a'和'b'的副本发送到foo,因此foo中的更改对原始的两个变量没有影响。
答案 1 :(得分:0)
在你的程序中,你试图更改函数中的局部变量而不传递它们的地址。它可能会在你的代码中给你错误。如果你将地址传递给函数,你可以改变变量的值。
foo(& a,& b); //将地址传递给函数。
void foo(int * a,int * b)//访问该地址的值
上述过程称为“按引用调用”。