C - возможно ли уменьшить максимальное значение цикла for из цикла for? - PullRequest
6 голосов
/ 13 апреля 2010

например:

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 фактически остается прежним.

Ответы [ 4 ]

9 голосов
/ 13 апреля 2010

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

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

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

4 голосов
/ 13 апреля 2010

Вы также можете использовать указатели , чтобы значение оставалось измененным вне функции 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.

1 голос
/ 13 апреля 2010

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

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

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

0 голосов
/ 13 апреля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...