【发布时间】:2020-01-16 23:04:28
【问题描述】:
我是 C 编程新手,我正在查看一些代码。我想知道以下是什么意思:
adjust(&total, adjustmentFactor);
我知道total 和adjustmentFactor 都是双精度数,但是由于该函数确实将输出分配给变量,我假设该函数更改了总点数?如果这就是它的作用,如果你要实施调整,你会如何改变它?
【问题讨论】:
标签: c parameter-passing ampersand
我是 C 编程新手,我正在查看一些代码。我想知道以下是什么意思:
adjust(&total, adjustmentFactor);
我知道total 和adjustmentFactor 都是双精度数,但是由于该函数确实将输出分配给变量,我假设该函数更改了总点数?如果这就是它的作用,如果你要实施调整,你会如何改变它?
【问题讨论】:
标签: c parameter-passing ampersand
是的,你是对的:& 符号获取左值(变量)的地址并将其作为指针传递。
您的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多变的。
【讨论】:
您可以通过两种方式将参数传递给函数:
按价值
整数;
调整(总计);
在这种情况下,将创建传递值的本地副本。如果您以某种不会影响父函数的“总”值的方式对其进行更改。
参考
整数;
调整(&total);
在这种情况下,“total”变量的地址将被传递,现在如果您以任何方式在adjust()中更改total,更改将使用父函数中的total变量进行。
我建议你阅读:
【讨论】: