Страница:
59 из 357
Например:
int x;
f() // извращение (* int y = x; // глобальное x int x = 22; y = x; // локальное x *)
Переменная y инициализируется значением глобального x, 11, а затем ему присваивается значение локальной переменной x, 22.
Имена параметров функции считаются описанными в самом внешнем блоке функции, поэтому
f(int x) (* int x; // ошибка *)
содержит ошибку, так как x определено дважды в одной и той же области видимости.
2.1.2 Объекты и Адреса (Lvalue)
Можно назначать и использовать переменные, не имеющие имен, и можно осуществлять присваивание выражениям странного вида (например, *p[a+10]=7). Следовательно, есть потребность в имени «нечто в памяти». Вот соответствующая цитата из справочного руководства по С++: "Объект есть область памяти.
lvalue есть выражение, ссылающееся на объект" (#с.5). Слово «lvalue» первоначально было придумано для значения «нечто, что может стоять в левой части присваивания». Однако не всякое lvalue можно использовать в левой части присваивания; бывают lvalue, ссылающиеся на константу (см. #2.4).
2.1.3 Время Жизни
Если программист не указал иного, то объект создается, когда встречается его описание, и уничтожается, когда его имя выходит из области видимости, Объекты с глобальными именами создаются и инициализируются один раз (только) и «живут» до завершения программы. Объекты, определенные описанием с ключевым словом static, ведут себя так же. Например*:
– * Команда #include «stream.h» была выброшена из примеров в этой главе для экономии места. Она необходима в примерах, производящих вывод, чтобы они были полными. (прим. автора)
int a = 1;
void f() (* int b = 1; // инициализируется при каждом // вызове f() static int c = 1; // инициализируется только о�
|< Пред. 57 58 59 60 61 След. >|