Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LektsiiS.doc
Скачиваний:
88
Добавлен:
13.04.2015
Размер:
815.1 Кб
Скачать

12.5 Числовые константы

В языке С, а следовательно и в С++, есть 4 вида целых констант:

1) десятичные (типа int или long): 0, 1234, 567893456.

2) 16-ичные (начинаются с 0х) : 0x3A, 0x3a.

3) 8-ичные (начинаются с 0 ) : 03216, 01.

4) символьные (типа char ) : 'a', 'D', \n.

Тип константы определяется транслятором по ее виду. Для явного указания типа служат суффиксы: U, u — unsigned; L, l — long; F, f — float. Так тип константы 0 определяется транслятором как int, а тип константы 0L — как long. Константы с плавающей точкой имеют тип double: 11.23, .01, 3.e10 .

З а д а ч а. Запишите число 3/5 в виде константы типа float.

12.6 Именные константы

Ключевое слово const, добавленное к объявлению переменной, делает переменную именной константой. Значение константы не может быть изменено, поэтому она должна быть инициализирована при объявлении, например const int model = 90;

В отношение “указывания” вовлечены 2 объекта: указатель и то, на что он указывает. Один из них или оба объекта могут быть константами.

const char *p = “abcd” // указатель на константу

char *const p = “abcd”; // постоянный указатель

const char *const p = “abcd”; // постоянный указатель на константу

Объект, являющийся константой при доступе к нему через один указатель, может быть переменной при доступе другими путями.

П р и м е р ы.

char v[] = "ABC";

const char* p = v;

v[1] = 'D';

p[1] = 'D'; // Ошибка! Попытка изменить константу

Указателю на константу можно присвоить адрес переменной, наоборот поступать нельзя. Указатели на константы широко применяются в качестве аргументов функций, чтобы исключить возможность модификации аргументов в теле функции.

12.7 Перечисление

Перечисление — это способ задания целых констант посредством определения типа. Вот пример перечисления:

enum {one, two, three};

что эквивалентно

const one = 0, two = 1, three = 2;

Перечисления могут быть именованными:

enum NAME {one, two, three};

Имя перечисления является именем типа. Если объявлено:

NAME x;

то x может принимать значения one, two, three.

Значения перечислителей можно задавать явно:

enum NAME{

one=1000,

two=200,

three=3

};

Такие значения не обязаны быть различными, возрастающими или положительными.

12.8 Порядок вычисления выражений

Порядок вычисления подвыражений в выражении не определен. Например, если определены

int i = 1, v[10];

стандарт языка не говорит как будет проинтерпретирован оператор

v[i] = i++;

как v[1] = 1 или v[2] = 1.

В операциях “,” (следование), “&&” и “||” левый операнд вычисляется раньше правого, а сами логические выражения вычисляются по короткой схеме.

При вызове функции порядок вычисления значений аргументов также не определен.

Вопросы

1. Что такое объявление ?

2. Что такое определение ?

3. Приведите пример объявления переменной, которое не является определением.

4. Чему равно значение x в результате выполнения оператора int static x;

5. Какова область видимости глобального имени ?

6. Какова область видимости локального имени ?

7. Как получить доступ к скрытому глобальному имени ?

8. Перепишите определение typedef int (*t) [10], выполняя по одной операции над типом в каждом операторе typedef.

9. Сформулируйте общий принцип построения декларации.

10. Какие суффиксы встречаются в записи числовых констант ?

11. Объявите указатель на длинную целую константу.

12. Объявите постоянный указатель на беззнаковую целую константу.

13. Задайте перечисление, определяющее времена года.

14. Что означает краткая схема вычисления логических выражений ?

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]