Понять оператор запятой
int main()
{
int a = (1,2,3);
int b = (++a, ++a, ++a);
int c= (b++, b++, b++);
printf("%d %d %d", a,b,c);
}
Я новичок в программировании. Я не понимаю, как эта программа показывает мне вывод 6 9 8
,
3 ответа
,
используется во всех трех декларациях
int a = (1,2,3);
int b = (++a, ++a, ++a);
int c = (b++, b++, b++);
оператор запятой. Он оценивает первый операнд1 и отбрасывает его, затем оценивает второй операнд и возвращает его значение. Следовательно,
int a = ((1,2), 3); // a is initialized with 3.
int b = ((++a, ++a), ++a); // b is initialized with 4+1+1 = 6.
// a is 6 by the end of the statement
int c = ((b++, b++), b++); // c is initialized with 6+1+1 = 8
// b is 9 by the end of the statement.
1 Порядок оценки гарантируется слева направо в случае оператора запятой.
Код ни в коем случае не хорош, и никто в здравом уме его никогда не напишет. Вы не должны тратить время на просмотр такого рода кода, но я все же дам объяснение.
Оператор запятой ,
означает "сделать левый, отменить любой результат, сделать правильный и вернуть результат. Размещение частей в скобках не влияет на функциональность.
Написано более четко код будет:
int a, b, c;
a = 3; // 1 and 2 have no meaning whatsoever
a++;
a++;
a++;
b = a;
b++;
b++;
c = b;
b++;
Операторы до и после приращения имеют различие в том, как они действуют, и это вызывает разницу в значениях b и c.
Я новичок в программировании. Я не понимаю, как эта программа показывает мне вывод
Просто поймите операторы запятой и префикс, постфикс.
в соответствии с правилами, указанными в предоставленных вам ссылках
int a = (1,2,3); // a is initialized with 3 last argument .
int b = (++a, ++a, ++a); // a is incremented three time so becomes 6 and b initilized with 6 .
int c = (b++, b++, b++); // b incremented two times becomes 8 and c initialized with 8.
// b incremented once more time becomes 9