2013-08-06 1 views
-3
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; 
} 
  1. Какая ценность b?
  2. и каковы его расчеты?
+1

Этот вопрос и знаменитый * == vs equals в Java * - это два заданных вопроса на Земле. – Maroun

+1

'undefined behaviour' для победы – user2485710

+0

Интересно, почему у вопросов есть такие вопросы? – P0W

ответ

0

Казалось бы, имеющего точку последовательности несущественно в выражении b=++a + ++a;

То есть, является ли первый ++a оценивается первое или второе ++a сначала вычисляется в любом случае a увеличивается в два раза, а затем в + оператор вступает в силу, поэтому возможное уравнение равно либо b = 2 + 3;, либо b = 3 + 2 таким образом b = 5.

Когда я вернусь домой, я попробую это с моим компилятором C.

Комментарий Blastfurnace обоим оценивается до того, как оператор + вступает в силу, и теперь, когда я думаю об этом, очевидно.

То есть + меньше, чем ++a. Можно утверждать, что это утверждение НЕ является двусмысленным в том, что изменение порядка оценки (от R до L или от L до R, как по отношению к приоритету) приводит к тому же ответу.

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

+0

... или обе стороны оцениваются перед добавлением, а результат - «3 + 3». В любом случае этот код ужасен, и нет смысла пытаться рассуждать об этом. – Blastfurnace

+0

в моем компиляторе c значение b показывает 6. здесь одна память с именем «a» используется совместно для обоих времен. для первого ++ a vale of a = 2 и для 2-го ++ a, a = 3, тогда b = 3 + 3 = 6. – Arijit

+0

@ Arijit, я согласен, после того, как попробовал. – JackCColeman