C - действительно ли возможно постепенно уменьшить макс. значение для цикла из для цикла?

например:

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 на самом деле остается таким же.

6
задан Tony Stark 12 April 2010 в 21:27
поделиться

4 ответа

Да, это возможно:

for (int i = 0; i < counter; i++) {
    counter--;
}

Причина, по которой это не работает в вашем примере, заключается в том, что вы передаете значение и изменяете копию значения. Это будет работать, если вы передадите указатель на переменную, а не просто передадите значение.

9
ответ дан 8 December 2019 в 17:19
поделиться

Все, что вы делаете, это просто счетчик -; , вам не нужно делать ничего особенного, особенно если это добавляет сложность кода без предоставления каких-либо дополнительных функций, которые язык уже не может вместить.

0
ответ дан 8 December 2019 в 17:19
поделиться

Вы также можете использовать указатели , чтобы значение оставалось измененным вне функции декремента :

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 - вместо вызова функции декремента .

4
ответ дан 8 December 2019 в 17:19
поделиться

Как показал Марк, это возможно, но это один из тех не делайте этого

Хотя с циклами for можно делать всякие хитрые вещи, лучше этого не делать, если можно написать это более понятным способом.

Сокращайте код для понимания, а не для объема кода. Код должен читаться людьми, а не заботиться о том, сколько места он занимает. (В любом случае, в общем случае)

1
ответ дан 8 December 2019 в 17:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: