例如:
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变量在每次运行for循环时递减,这样它运行的迭代次数少于20次。但是gdb显示在decrement()中counter是递减的,但是返回到for循环counter实际上保持不变。
发布于 2010-04-13 05:28:26
是的,这是可能的:
for (int i = 0; i < counter; i++) {
counter--;
}它在您的示例中不起作用的原因是因为您通过值传递并修改了值的副本。如果你传递了一个指向变量的指针,而不是仅仅传递了值,那么它将会工作。
发布于 2010-04-13 05:33:17
您还可以在decrement函数之外执行use pointers,以便值保持更改:
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函数。
发布于 2010-04-13 05:41:39
正如Mark所展示的,这是可能的,但这是其中一个不能做到的
虽然你可以用for循环来处理各种棘手的事情,但如果你能以一种更清晰的方式编写它,最好不要这样做。
保持代码简短以便于理解,而不是代码空间。代码是供人类阅读的,而不是关心它占用了多少空间。(在一般情况下,无论如何)
https://stackoverflow.com/questions/2625585
复制相似问题