Сегодня я пересматривал Pre Increment and Post Increment.Pre Increment & Post Increment
Основные определения, которые я знаю.
Pre Increment - Увеличивает значение и возвращает значение.
Post Increment - Увеличивает значение и возвращает значение до приращения.
Но, выполняя некоторые комбинации из них, я в тупике.
Используя базовую программу C, вот что я тестировал.
С i = 0 изначально.
первый тест
printf("%d %d",++i,++i);
Ouput:
2 2
I Ожидаемое:
1 2
второго испытания
printf("%d %d",i++,i++);
Ouput:
1 0
I Ожидаемое:
0 1
третьего испытания
printf("%d %d",i++,++i);
Ouput:
1 2
I Ожидаемое:
0 2
четвёртую Тест
printf("%d %d",++i,i++);
Ouput:
2 0
I ОЖИДАЕТСЯ:
1 1
Я понял, что оценка может быть с правой или с левой стороны. Может быть, слева в случае предварительного приращения & Право в случае приращения сообщения. Возможно, Pre Increment имел более высокий приоритет, чем приращение Post. Некоторые идеи соответствуют результатам, но предположение, сделанное на одном тесте, не объясняет другой результат.
Все неопределенное поведение. – chris
Для C, связанных с [Почему эти конструкции не определены?] (Http://stackoverflow.com/q/949433/1708801) и [Является результатом printf («% d% d», C++, c); также undefined?] (http://stackoverflow.com/q/10845122/1708801) –
Измените свои тесты на что-то вроде 'int before = i ++; printf ("% d% d \ n", before, i); 'чтобы избавиться от неопределенного поведения. – 5gon12eder