2016-02-10 3 views
2

позволяет сказать, что у меня есть два массива int, array1 и array2.Приращение двух индексов сразу

Является ли эта линия:

array1[i++] = array2[j++]; 

равно это:

array1[i] = array2[j]; 
i++; 
j++; 

?

+7

Да, они эквивалентны. – haccks

+3

Прежде чем вы получите ответ, позвольте мне спросить вас, вы пытались написать образец кода и проверить выход? Что ты получил? Какую часть вы не понимаете? –

+2

Пожалуйста, покажите свое исследование до времени. Сначала прочитайте страницу [Ask]. –

ответ

3

Да они эквивалентны, если вы написали #DEFINE i j или #DEFINE j i, в этом случае поведение первого фрагмента является неопределенным.

+0

Жаль. Я только что отложил каждый ответ на http://stackoverflow.com/questions/35318980/java-how-to-create-an-arraylist-of-integer-arrays?noredirect=1, и поэтому вам нужна карма. – Bathsheba

+0

Ну что ж, это от меня –

+1

... и не оба определяет :) – ryanpattison

2

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

Если вы сделали это, однако, вы бы вызвать undefined behavior:

array1[i++] = array2[i++]; 

Но это было бы хорошо, так как оператор запятая представляет точку последовательности:

array1[i++] = (j++,j++); 
+0

Я не могу согласиться с тем, что второй пример «отлично»! Это может быть не неопределенным, но это нереально и сбивает с толку ... –

Смежные вопросы