例如:
void decrement(int counter) {
counter--;
}
int counter = 20;
for (int i = 0; i < counter; i++) {
for (int j = 0; j < counter, j++) {
decrement(counter);
}
}
理想情况下,我希望看到的是每次运行for循环时counter
var都会递减,因此它运行的次数少于20次。但是gdb显示在decrement()
counter
内递减,但回到for循环counter
实际上保持不变。
答案 0 :(得分:9)
是的,有可能:
for (int i = 0; i < counter; i++) {
counter--;
}
它在您的示例中不起作用的原因是因为您传递值并修改值的副本。如果您传递指向变量的指针而不是仅传递值,它将起作用。
答案 1 :(得分:4)
您还可以use pointers,以便在decrement
函数之外更改值:
void decrement(int *counter) {
(*counter)--;
}
int counter = 20;
for (int i = 0; i < counter; i++) {
for (int j = 0; j < counter; j++) {
decrement(&counter);
}
}
或者只是执行counter--
而不是调用decrement
函数。
答案 2 :(得分:1)
正如马克已经证明有可能,但其中一个不这样做
虽然你可以使用for循环来处理各种棘手的事情,但最好不要以更清晰的方式编写它。
保持代码简短以便理解,而不是代码空间。代码是供人阅读,而不是关心它占用多少空间。 (一般情况下反正)
答案 3 :(得分:0)
您所做的只是counter --;
,您不需要做任何特别的事情,特别是如果它增加了代码的复杂性而不提供该语言无法容纳的任何其他功能。