Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Инициализация





 

Мы до сих пор уже много раз упоминали инициализацию, но

всегда мимоходом, среди других вопросов. Теперь, после того

как мы обсудили различные классы памяти, мы в этом разделе

просуммируем некоторые правила, относящиеся к инициализации.

Если явная инициализация отсутствует, то внешним и ста-

тическим переменным присваивается значение нуль; автомати-

ческие и регистровые переменные имеют в этом случае неопре-

деленные значения (мусор).

 

Простые переменные (не массивы или структуры) можно ини-

циализировать при их описании, добавляя вслед за именем знак

равенства и константное выражение:

 

INT X = 1;

CHAR SQUOTE = '\'';

LONG DAY = 60 * 24; /* MINUTES IN A DAY */

 

Для внешних и статических переменных инициализация выполня-

ется только один раз, на этапе компиляции. Автоматические и

регистровые переменные инициализируются каждый раз при входе

в функцию или блок.

В случае автоматических и регистровых переменных инициализа-

тор не обязан быть константой: на самом деле он может быть

любым значимым выражением, которое может включать определен-

ные ранее величины и даже обращения к функциям. Например,

инициализация в программе бинарного поиска из главы 3 могла

бы быть записана в виде

 

 

BINARY(X, V, N)

INT X, V[], N;

{

INT LOW = 0;

INT HIGH = N - 1;

INT MID;

...

}

 

вместо

 

BINARY(X, V, N)

INT X, V[], N;

{

INT LOW, HIGH, MID;

 

LOW = 0;

HIGH = N - 1;

...

}

 

По своему результату, инициализации автоматических перемен-

ных являются сокращенной записью операторов присваивания.

Какую форму предпочесть - в основном дело вкуса. мы обычно

используем явные присваивания, потому что инициализация в

описаниях менее заметна.

Автоматические массивы не могут быть инициализированы. Внеш-

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

вслед за описанием заключенный в фигурные скобки список на-

чальных значений, разделенных запятыми. Например программа

подсчета символов из главы 1, которая начиналась с

MAIN() /* COUNT DIGITS, WHITE SPACE, OTHERS */

(

INT C, I, NWHITE, NOTHER;

INT NDIGIT[10];

 

NWHITE = NOTHER = 0;

FOR (I = 0; I < 10; I++)

NDIGIT[I] = 0;

...

)

 

Ожет быть переписана в виде

 

INT NWHITE = 0;

INT NOTHER = 0;

INT NDIGIT[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

 

MAIN() /* COUNT DIGITS, WHITE SPACE, OTHERS */

(

INT C, I;

...

)

 

Эти инициализации фактически не нужны, так как все присваи-

ваемые значения равны нулю, но хороший стиль - сделать их

явными. Если количество начальных значений меньше, чем ука-

занный размер массива, то остальные элементы заполняются ну-

лями. Перечисление слишком большого числа начальных значений

является ошибкой. К сожалению, не предусмотрена возможность

указания, что некоторое начальное значение повторяется, и

нельзя инициализировать элемент в середине массива без пере-

числения всех предыдущих.

Для символьных массивов существует специальный способ

инициализации; вместо фигурных скобок и запятых можно ис-

пользовать строку:

 

CHAR PATTERN[] = "THE";

 

Это сокращение более длинной, но эквивалентной записи:

 

CHAR PATTERN[] = { 'T', 'H', 'E', '\0' };

 

Если размер массива любого типа опущен, то компилятор опре-

деляет его длину, подсчитывая число начальных значений. В

этом конкретном случае размер равен четырем (три символа

плюс конечное \0).

 

 

Date: 2015-09-17; view: 351; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию