Рубрики

Вопрос о запятой

Рассмотрим следующие программы на Си.

// ПРОГРАММА 1
#include<stdio.h>

  

int main(void)

{

    int a = 1, 2, 3;

    printf("%d", a);

    return 0;

}

Приведенная выше программа завершается неудачно при компиляции, но следующая программа компилирует нормально и печатает 1.

// ПРОГРАММА 2
#include<stdio.h>

  

int main(void)

{

    int a;

    a = 1, 2, 3;

    printf("%d", a);

    return 0;

}

И следующая программа печатает 3, почему?

// ПРОГРАММА 3
#include<stdio.h>

  

int main(void)

{

    int a;

    a = (1, 2, 3);

    printf("%d", a);

    return 0;

}

В программах на C / C ++ запятая используется в двух контекстах: (1) Разделитель (2) Оператор. (Смотрите это для более подробной информации).

Запятая работает как разделитель в ПРОГРАММЕ 1, и мы получаем ошибку компиляции в этой программе.

Запятая работает как оператор в ПРОГРАММЕ 2. Старшинство оператора запятая меньше всего в таблице приоритетности оператора . Таким образом, оператор присваивания имеет приоритет перед запятой, и выражение «a = 1, 2, 3» становится эквивалентным «(a = 1), 2, 3». Вот почему мы получаем вывод как 1 во второй программе.

В ПРОГРАММЕ 3 используются квадратные скобки, так что сначала выполняется оператор запятой, и мы получаем вывод как 3 (подробнее см. На странице Wiki ).

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

Рекомендуемые посты:

Вопрос о запятой

0.00 (0%) 0 votes