【发布时间】:2017-03-29 04:00:31
【问题描述】:
如果我有一个根据某些规则递增 global 变量的函数,并且我通过引用传递了一个变量,我是否必须返回或者该变量是否会被更新?这也适用于局部变量吗?例如:
static uint8_t counter = 1;
void add(uint8_t *variable)
{
if (*variable == 5)
{
*variable = 7;
} else if (*variable == 20)
{
*variable = 1;
} else
{
*variable++;
}
}
我将“添加”函数称为:
void function(void)
{
... some code...
add(&counter);
... some code...
}
【问题讨论】:
-
也许我做错了,有更好的方法来解决这个问题......
-
如果你有一个全局变量(但
static),并且add函数在同一个翻译单元中,为什么首先要传递一个参数? -
看来您实际上是在传递指针的值(而不是通过 ref),尽管这段代码通常没有什么意义。如果变量是全局变量,则不需要传递它。此外,add 中的两个取消引用可能是不必要的。
-
如果函数的目的是根据参数计算一个值,为什么不将该值作为 return 值返回?这避免了将指针传递给函数,并在函数内部修改它们指向的对象。例如:你喜欢
void sin(double *result, double rads): -
其他人都提供了很好的指导,您应该听听,但要回答您的问题:不,通过指针更新变量时不需要返回语句。
标签: c pointers global-variables parameter-passing pass-by-reference