Pallav Jyoti Pal Ответов: 3

Каково значение n, a, b, C после выполнения приведенного выше кода?


int a=1, b=4, c=3, n;
n=(++a*b)-(c--);
a=b++*b++*b++;


Каково значение n, a, b, c после выполнения приведенного выше кода?

Что я уже пробовал:

Н=(++4)-(3--) = 5-2 = 3 — Правильно?

а=4++*4++*4++ = 5*5*5 = 125 — правильно?

Graeme_Grant

Попробуйте запустить код...

3 Ответов

Рейтинг:
2

Richard MacCutchan

Запустите код и убедитесь сами. И, как правило, такие выражения не гарантируют ожидаемых результатов, поэтому не используйте их.


Pallav Jyoti Pal

не могли бы вы помочь мне, чтобы я мог понять и получить ответ. Я знаю, что приращения суффикса и префикса обозначаются A++ и ++a соответственно.

Richard MacCutchan

Как я уже сказал, Не используйте подобные выражения, так как компилятор не обязательно будет генерировать код, который вы ожидаете.

Рейтинг:
2

Patrice T

читать это:
Приоритет оператора C - cppreference.com[^]

// This line
n=(++a*b)-(c--);
// translate to
++a;
n=(a*b)-(c);
c--;


эта строка находится в серой зоне и зависит от компилятора, поэтому она непредсказуема:
a=b++*b++*b++;
// can be
a=4*4*4;
// as well as
a=4*5*6;


Используйте отладчик, чтобы увидеть, что на самом деле делает ваш код.

Существует инструмент, который позволяет вам видеть, что делает ваш код, его имя отладчик Это также отличный инструмент обучения, потому что он показывает вам реальность, и вы можете увидеть, какие ожидания соответствуют реальности.
Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик-Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010-YouTube[^]
Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.


Рейтинг:
2

RAMASWAMY EKAMBARAM

Просто чтобы проиллюстрировать на реальном примере, что значение таких выражений может зависеть от компилятора, попробуйте воспользоваться этой простой модификацией:

a=b++*++b*++b;

С gcc (компилятор) вы получаете значение 150 для 'a'
а с bcc32 (Borland C++ compiler) вы получаете 216 для 'a'.

Чтобы узнать "почему", вам нужно будет увидеть выходные данные языка ассемблера