Понять оператор запятой

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
Другие вопросы по тегам