например:
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
var, постепенно уменьшаемый, каждый раз для цикла выполняется, так, чтобы он выполнил меньше чем 20 повторений. но gdb показывает это в decrement()
counter
постепенно уменьшается, но что, возвращаясь к для цикла counter
на самом деле остается таким же.
Да, это возможно:
for (int i = 0; i < counter; i++) {
counter--;
}
Причина, по которой это не работает в вашем примере, заключается в том, что вы передаете значение и изменяете копию значения. Это будет работать, если вы передадите указатель на переменную, а не просто передадите значение.
Все, что вы делаете, это просто счетчик -;
, вам не нужно делать ничего особенного, особенно если это добавляет сложность кода без предоставления каких-либо дополнительных функций, которые язык уже не может вместить.
Вы также можете использовать указатели , чтобы значение оставалось измененным вне функции декремента
:
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 можно делать всякие хитрые вещи, лучше этого не делать, если можно написать это более понятным способом.
Сокращайте код для понимания, а не для объема кода. Код должен читаться людьми, а не заботиться о том, сколько места он занимает. (В любом случае, в общем случае)