Путаница с увеличением/уменьшением

Что происходит, когда мы уменьшаем код здесь:

temp[--countArray[getDigit(position, input[tempIndex], radix)]]

Если в этом случае temp равно 1: мы сначала уменьшаем его, чтобы присвоить 0? Насколько немедленным является это уменьшение? Мне всегда кажется, что меня смущают скобки массива.


person Matt    schedule 20.10.2020    source источник
comment
Он уменьшает countArray[getDigit(position, input[tempIndex], radix)] и использует уменьшенное значение в качестве индекса для temp.   -  person khelwood    schedule 20.10.2020
comment
Если в этом случае countArray равен 1 — countArray не может быть 1. Это должен быть массив.   -  person khelwood    schedule 20.10.2020
comment
@khelwood Моя ошибка, я хотел написать «если временный индекс равен 1»   -  person Matt    schedule 20.10.2020


Ответы (2)


Попробуйте распаковать скобки на разных уровнях отступа:

temp[                                                // get this index in temp
    --                                               // decrement by 1
    countArray[                                      // get this index in countArray
        getDigit(position, input[tempIndex], radix)  // call getDigit()
    ]
]

Говоря понятным языком, он вызывает getDigit() для индексации в countArray, затем уменьшает это значение и использует его для индексации в temp.


Оператор декремента --x отличается от x-- тем, что он возвращает. К концу операции x всегда оказывается на единицу меньше, чем было, но --x возвращает новое значение x, а x-- возвращает старое значение x из до того, как он был уменьшен. То же самое относится к ++x и x++.

person Green Cloak Guy    schedule 20.10.2020

Позвольте мне немного разбить это. Вот некоторый код, эквивалентный приведенному выше:

int digit = getDigit(position, input[tempIndex], radix);
countArray[digit]--;
int count = countArray[digit];
temp[count] // Do something with the value

Между прочим, это классическая иллюстрация того, почему не следует жертвовать ясностью ради краткости.

person EJoshuaS - Reinstate Monica    schedule 20.10.2020