&变量的意义(传递给函数)

时间:2014-05-23 08:48:25

标签: c embedded

int main()
{
    int a = 3;
    func(&a)
}

(func是一些任意用户定义的函数)

这个&amp ;?的含义是什么?我知道它是引用变量,但到目前为止我只看到它被用在函数定义中。

(另外,实际代码中的变量a可能是全局的或外部的或者其他东西,我不确定: - /)。

4 个答案:

答案 0 :(得分:4)

  

func是一些任意用户定义的函数

它不能是“任意的” - 它必须指向intvoid*,以使呼叫合法。

此&符号是“接收地址”运算符。它将func的地址传递给a,以便func可以修改它:

void func(int *pa) {
    *pa = 4; // Note the asterisk - it "undoes" the effect of the ampersand
}

如果您在main致电后a打印func,则会打印4而不是3

请注意,如果您将a而非指向a的指针传递给采用int而非int*的函数,则会对int进行修改1}}函数内部对你传递的参数没有影响,因为在C中参数是按值传递的。

  

实际代码中的变量a可能是全局或外部或某种

它可能不是全球性的,因为传递全局变量没有意义:由于它是全球性的,它们已经可以从任何地方访问。

答案 1 :(得分:2)

&表示您将该变量的地址传递给该函数。 当函数接受指针参数并且您只有一个原子变量时,这是必需的。

答案 2 :(得分:1)

函数调用中使用

&将变量的地址(&之后)传递给函数。
由于在C中没有引用调用,如果您有兴趣在调用者中反映变量的变化,则需要将变量的地址传递给函数。

答案 3 :(得分:1)

表达式&<variable>生成<variable>的地址。

在您的示例中,允许func()通过解除引用(例如main())直接修改a的本地变量*a = b的值。

在您的示例中,结果可以更简单,更安全地从函数中返回:例如a = func(),但该技术通常对以下内容有用:

  • 除了返回值之外或通过多个指针参数从函数中获取多个结果。
  • 有效地将非常大的对象传递给函数(如果仅用于输入,则参数可能是const限定的。)