#c #символы #ansi
Вопрос больше философского характера, чем технического. По определению константой в языке Си назвается такая переменная, которую нельзя изменять по ходу выполнения программы и такая переменная доступна только для чтения. Вопрос с объявлением числовых констант отпадает сразу - и так ясно, что имеется в виду int const a = 5; Такое объявление и описание не вызывает особых трудностей для понимания. Что же подразуемвается под символьной константой? Языком лысого ёжика, это числовой код, которому соответствует символьное отображение (ASCII-код). Но что здесь является константой; в чем выражается неизменность? Что каждому символу соответствует данный код? Но как мы его изменим? Ведь язык не допускает такую конструкцию: 'a' = 666; Вопрос, на которого я требую ответа: "В чем выражается неизменность символьных констант?"
Ответы
Ответ 1
Термин константа в языке С имеет строгое определение. По определению, термин константа обозначает именно и только буквальные литеральные значения: 25, 'f', 0x13, 3.1415. Также термин константа в языке С распространяется на члены перечислений, результат _Alignof и sizeof (с некоторыми исключениями). Это все. Объекты, объявленные со спецификатором const, константами в языке С не являются. Ваше int const a = 5; это ни в коем случае не константа в языке С (!). Это просто, скажем так, "немодифицируемая переменная". Важность правильного понимания термина константа обуславливается тем, что ряд контекстов в языке С требует использования именно констант и константных выражений. Например, инициализатор для статического объекта должен быть именно константой. Ваше a в этой роли использовать не получится int const a = 5; static int x = a; // Ошибка - инициализатор не константен Символьными константами в С называются константы вида 'a' (также сюда можно причислить мультисимвольные константы вида 'abc'). Они не являются lvalue. Не существует никаких корректных конструкций языка С, которые могли бы их изменить. В этом и заключается их "неизменность". То есть вторая часть вашего вопроса действительно содержит правильный ответ. Невозможно "изменить" то, что не является lvalue.Ответ 2
Символьная константа – это некоторый символ алфавита, заключенный в одиночные кавычки. Значением символьной константы является целое число, равное ASCII коду данного символа. Символьная константа имеет тип int или char и размерно состовляет 16 или 8 бит, соответственно.
Комментариев нет:
Отправить комментарий