我是C的新手,遇到了我认为特别的代码,
extern int num;
int counter;
void init_counter() {
counter = 0;
}
int return_position() {
int pos = counter;
counter = counter * num;
return pos;
}
pos变量有什么意义? 为什么我不能这样做:
extern int num;
int counter;
void init_counter() {
counter = 0;
}
int return_position() {
counter = counter * num;
return counter;
}
感谢任何帮助
答案 0 :(得分:1)
pos
变量的重点是保留(然后返回)counter
的原始值。你的替代品" version返回counter
的 new 值,这是一种完全不同的行为。
尝试在没有额外变量的情况下实现预期行为可能如下所示
int return_position()
{
counter = counter * num;
return counter / num;
}
但是它更难以阅读,并且失败为零num
。
答案 1 :(得分:0)
如前所述,这两个代码不一样,并且pos保留了旧的计数器值
假设在init_counter调用后你将1分配给计数器,num为3,我们运行return_position()
3次:
了解如何遵循您的代码非常重要
我之所以认为counter = 1是因为counter = counter*num;
总是会产生0,除非counter是其他东西......
counter = 1, num = 3
所以在第一个条目
pos = 1
counter = 3*1
我们返回1
下一轮
counter = 3, num = 3
pos = 3
counter = 3*3 = 9
return 3
下一轮
counter = 9, num = 3
pos = 9
counter = 9 * 3 = 27
return 9
所以,如果我们只打印了返回的值,我们就会得到 “ 1 3 9 “ 计数器等于27
更方便的方法是创建变量表并像以前一样更新它。 ofc有调试工具可以帮助你这样做,但首先尝试使用笔和纸
请注意,如果我们假设计数器仅由init_counter()初始化
然后我们只会拨打return_position()
3次
我们只得到0,这是没有意义的:)