【问题标题】:What does ampersand mean in function call?和号在函数调用中是什么意思?
【发布时间】:2020-01-16 23:04:28
【问题描述】:

我是 C 编程新手,我正在查看一些代码。我想知道以下是什么意思:

adjust(&total, adjustmentFactor);

我知道totaladjustmentFactor 都是双精度数,但是由于该函数确实将输出分配给变量,我假设该函数更改了总点数?如果这就是它的作用,如果你要实施调整,你会如何改变它?

【问题讨论】:

标签: c parameter-passing ampersand


【解决方案1】:

是的,你是对的:& 符号获取左值(变量)的地址并将其作为指针传递。

您的adjust() 函数如下所示:

void adjust(double *a, double f) {
   ... do a lot of stuff
   *a = *a * f/2+1.0;     // dummy formula that will change the content 
   ...   
}; 

因此,在函数中,每次您想使用第一个参数所指向的值,并且每次您想为原始值分配一个新值时,您都将使用 *a多变的。

【讨论】:

    【解决方案2】:

    您可以通过两种方式将参数传递给函数:

    1. 按价值

      整数;

      调整(总计);

      在这种情况下,将创建传递值的本地副本。如果您以某种不会影响父函数的“总”值的方式对其进行更改。

    2. 参考

      整数;

      调整(&total);

    在这种情况下,“total”变量的地址将被传递,现在如果您以任何方式在adjust()中更改total,更改将使用父函数中的total变量进行。

    我建议你阅读:

    Reference and dereference

    pointers

    【讨论】:

    • 我会注意到 C 都是 pass-by-value,但该值可能是要传递给指针的地址,而不是像 C++ 这样的语言它实际上具有 pass-by-reference 的特定概念
    猜你喜欢
    • 2020-11-24
    • 2022-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    相关资源
    最近更新 更多