Вот ваш код, слегка измененный, чтобы показать два случая, о которых вы спрашиваете.
#include <iostream>
#include <stdio.h>
using namespace std;
int main() {
int a;
a = 5;
if(a) // check whether a is zero (false) or non-zero (true)
{
// variable a has a non-zero value (true)
printf("if %d\n" , ++a); // preincrement variable a then print value
}
else {
// variable a has a value of zero (false)
printf("else %d\n" , a); // print value as it is
}
a = 0;
if(a) // check whether a is zero (false) or non-zero (true)
{
// variable a has a non-zero value (true)
printf("if %d\n" , ++a); // preincrement variable a then print value
}
else {
// variable a has a value of zero (false)
printf("else %d\n" , a); // print value as it is
}
return 0;
}
Существует разница между прединкрементом переменным, используя ++ а, и postincrement переменного, используя ++.
Preincrement, ++ a, увеличивает значение переменной и делает новое значение доступным для следующего оператора или действия.
Postincrement, a ++, делает текущее значение переменной доступным для следующего оператора или действия, а затем увеличивает эту переменную.
Посмотрите на следующий код.
int a;
int b;
a = 5;
b = a; // straight assignment, no increment, b now contains 5.
b = a++; // postincrement a, do assignment, b now contains 5, a contains 6
b = ++a; // preincrement a, do assignment, b now contains 7, a contains 7
Теперь в вашем коде вы сначала присвоить значение 5 переменной a
. Когда вы делаете if
, вы проверяете, соответствует ли значение a
(значение отличное от нуля) или false (значение равно нулю). Так как a
равно 5, значение отличное от нуля, то оно принимает путь then
.
При использовании printf()
значение a
модифицировано с использованием преэнкремента. Это означает, что значение a
сначала увеличивается, а затем новое значение a
используется в printf()
. Таким образом, вы печатаете значение преинкрементной переменной a
, которая составляет 6 печатать «если 6».
Если вы использовали постинкрест, тогда старое значение a
было бы использовано в printf() `printing", если 5 ".
Затем вы устанавливаете значение переменной a
в ноль. Если проверяется, является ли a
истинным, отличным от нуля или ложным, нолем, а так как a
теперь равен нулю или false, то путь будет else
. В этом printf()
вы просто печатаете значение переменной a
, так что вы видите «else 0».
Можете ли вы уточнить, какая часть вас путает? –
Как вы думаете, 'if (a)' должен делать? – AndyG
@ FrançoisAndrieux Часть Я запутался в том, почему она увеличивает значение до 6 в выражении if, когда int a = 5.и когда я заменяю тот же int a = 0, он печатает else 0 –