Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СОВРЕМЕННЫЕ МЕТОДЫ ПРОГРАММИРОВАНИЯ.docx
Скачиваний:
0
Добавлен:
03.01.2020
Размер:
797.27 Кб
Скачать

8.6. Инициализация глобальных и локальных переменных

При инициализации необходимо придерживаться следующих правил:

o  объявления, содержащие спецификатор класса памяти extern, не могут содержать инициаторов;

o  глобальные переменные всегда инициализируются, и если это не сделано явно, то они инициализируются нулевым значением;

o  переменная с классом памяти static может быть инициализирована константным выражением. Инициализация для них выполняется один раз при создании переменной. Если явная инициализация отсутствует, то переменная инициализируется нулевым значением;

o  явная инициализация переменных с классом памяти auto или register выполняется всякий раз при входе в блок, в котором они объявлены. Если инициализация переменных в объявлении отсутствует, то их начальное значение не определено;

o начальными значениями для глобальных переменных и переменных с классом памяти static должны быть константные выражения. Адреса таких переменных являются константами, которые можно использовать для инициализации объявленных глобально указателей. Адреса переменных с классом памяти auto или register не являются константами и их нельзя использовать в инициаторах.

Глава 9. Указатели

9.1. Операция получения адреса 9.2. Операции над указателями

Указатель – это переменная, значением которой является адрес некоторого объекта (обычно другой переменной) в памяти компьютера. Подобно тому, как переменная типа char имеет в качестве значения символ, а переменная типа int – целочисленное значение, переменная типа указателя имеет в качестве значения адрес ячейки оперативной памяти. Допустимые значения для переменной-указателя – множество адресов оперативной памяти компьютера.

Указатель является одной из наиболее важных концепций языка C.

Правильное понимание и использование указателей особенно необходимо для составления хороших программ по следующим причинам:

     указатели являются средством, при помощи которого функции могут изменять значения передаваемых в нее аргументов;

     при помощи указателей выполняется динамическое распределение памяти;

     указатели позволяют повысить эффективность программирования;

     указатели обеспечивают поддержку динамических структур данных (двоичные деревья, связные списки).

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

Итак, указатель – это новый тип данных. Для него определены понятия константы, переменной, массива. Как и любую переменную, указатель необходимо объявить. Объявление указателя состоит из имени базового типа, символа * (звездочка) и имени переменной.

Общая форма объявления указателя:

тип *имя;

Тип указателя определяет тип объекта, на который указатель будет ссылаться, например,

int *p1;

Фактически указатель любого типа может ссылаться на любое место в памяти, но выполняемые над указателем операции существенно зависят от его типа. Так, если объявлен указатель типа int *, компилятор предполагает, что любой адрес, на который он ссылается, содержит переменную типа int, хотя это может быть и не так. Следовательно, объявляя указатель, необходимо убедиться в том, что его тип совместим с типом объекта, на который он будет ссылаться.