C - 函数的多个“输出”

时间:2013-11-20 03:22:21

标签: c

我必须在这里做一些极其愚蠢的事情,但我无法弄清楚是什么。如果我在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);

}

2 个答案:

答案 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)//访问该地址的值

上述过程称为“按引用调用”。