int main()
{
int b=0,a=1;//initialize a and b
b=++a + ++a;// calculate assign the value of b
print f("%d",b);
return 0;
}
- Какая ценность b?
- и каковы его расчеты?
int main()
{
int b=0,a=1;//initialize a and b
b=++a + ++a;// calculate assign the value of b
print f("%d",b);
return 0;
}
Это Undefined Behaviour. Отсутствие sequence point.
Для получения дополнительной информации см. here и output-of-multiple-post-and-pre-increments-in-one-statement.
Казалось бы, имеющего точку последовательности несущественно в выражении b=++a + ++a;
То есть, является ли первый ++a
оценивается первое или второе ++a
сначала вычисляется в любом случае a
увеличивается в два раза, а затем в +
оператор вступает в силу, поэтому возможное уравнение равно либо b = 2 + 3;
, либо b = 3 + 2
таким образом b = 5.
Когда я вернусь домой, я попробую это с моим компилятором C.
Комментарий Blastfurnace обоим оценивается до того, как оператор +
вступает в силу, и теперь, когда я думаю об этом, очевидно.
То есть +
меньше, чем ++a
. Можно утверждать, что это утверждение НЕ является двусмысленным в том, что изменение порядка оценки (от R до L или от L до R, как по отношению к приоритету) приводит к тому же ответу.
Никто не будет требовать, чтобы это был хорошо написанный код, интересный по нескольким пунктам для обсуждения, но не тот, который должен быть одобрен.
... или обе стороны оцениваются перед добавлением, а результат - «3 + 3». В любом случае этот код ужасен, и нет смысла пытаться рассуждать об этом. – Blastfurnace
в моем компиляторе c значение b показывает 6. здесь одна память с именем «a» используется совместно для обоих времен. для первого ++ a vale of a = 2 и для 2-го ++ a, a = 3, тогда b = 3 + 3 = 6. – Arijit
@ Arijit, я согласен, после того, как попробовал. – JackCColeman
Этот вопрос и знаменитый * == vs equals в Java * - это два заданных вопроса на Земле. – Maroun
'undefined behaviour' для победы – user2485710
Интересно, почему у вопросов есть такие вопросы? – P0W