Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по Си.doc
Скачиваний:
3
Добавлен:
15.11.2019
Размер:
2.72 Mб
Скачать

Комментарии

Программа без комментариев – первый признак непрофессионализма.

Комментарии можно начинать или двумя знаками деления:

//это комментарий

или заключать между символами-скобками /* */:

/* это комментарий */

Внутри комментария можно использовать любые допустимые на данном компьютере символы, а не только символы алфавита языка Си, поскольку комментарии не обрабатываются компилятором.

Рекомендуется использовать //-комментарии для пояснений, а скобки /* */ применять для временного исключения программных блоков при отладке программы.

Переменные

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

В программировании термин переменная означает область оперативной памяти, в которой хранятся данные определенного типа. У переменной есть имя и значение. Имя переменной можно рассматривать как адрес первого байта области памяти, в которой она хранится. Знание этого адреса дает возможность пользователю изменять значение переменной в процессе выполнения программы.

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

Таким образом, понятие переменной употребляется для обозначения величины, которая при работе программы может принимать различные значения. Каждая переменная должна иметь свое имя-идентификатор. Имена переменных программист выбирает сам, руководствуясь следующими правилами:

  • имя переменной должно отражать ее смысл, то есть то, что с помощью этой переменной вычисляется,

  • не допускается совпадение имени переменной со служебными словами и именами функций,

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

  • имя должно начинаться с буквы,

  • совпадающие имена, состоящие из строчных и прописных букв, считаются различными: name и NAME – различные имена.

Переменные в Си могут иметь один из трех стандартных типов:

int - целый,

float - вещественный,

char - символьный.

Диапазон допустимых значений переменных совпадает с диапазоном допустимых значений констант того же типа:

int: -32768 … +32767,

float: ±3,4×10-38…±3,4×10+38,

char: 0 … 255.

Кроме этих основных типов можно использовать следующие типы переменных:

long: -2 147 483 648 … +2 147 483 647,

double: ±1,7×10-308…±1,7×10+308,

и их беззнаковые аналоги:

unsigned int: 0 … 65535,

unsigned long: 0 … 4 294 967 295.

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

Самое простое описание включает в себя тип переменной и ее имя:

Int I,j,k; //переменные I, j, k – целого типа

float x,y; //переменные x, y – вещественного типа

char a; //переменная a – символьного типа

Желательна инициализация переменных при их описании:

int i=1, j=0, k=2;

float x=0.25, y=-1.5;

char a=’W’;

Если при описании переменной использован модификатор const, то это означает, что значение переменной нельзя изменять в программе. Такую переменную называют именованной константой. Она обязательно должна быть инициализирована:

const int i=1; //именованная целая константа i

const float x=0.25; //именованная вещественная константа x

const char a=’W’; //именованная символьная константа a

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

auto - автоматическая переменная. Память под нее выделяется в стеке и при необходимости инициализируется каждый раз при выполнении оператора, содержащего ее описание. Освобождение памяти происходит при выходе из блока, в котором описана переменная. Время ее жизни – от момента описания до конца блока. Для локальных (описанных внутри блока) переменных спецификатор auto применяется по умолчанию, поэтому задавать его явным образом смысла не имеет,

extern - внешняя переменная. Эта переменная определяется в другом месте программы (в другом файле или дальше по тексту программы). Используется для создания переменных, доступных во всех модулях программы, в которых они объявлены. Если переменная в этом же описании инициализируется, то спецификатор extern игнорируется,

static - статическая переменная. Время ее жизни – постоянное. Инициализируется один раз при первом выполнении оператора, содержащего описание переменной. В зависимости от расположения оператора описания статические переменные могут быть глобальными (описаны вне любого блока, область их действия – весь файл, в котором они описаны) и локальными (описаны внутри блока). Глобальные статические переменные видны только в том модуле, в котором они описаны,

register - регистровая переменная. Память для нее выделяется в регистрах процессора. Если такой возможности у компилятора нет, переменные обрабатываются как auto:

int a; //глобальная переменная a

void main() //заголовок головной программы

{ //начало блока головной программы

int b=1; //локальная переменная b

extern float x;//переменная x определена в другом месте

static int c=0;//локальная статическая переменная c

register char d=’W’; //регистровая переменная d

a=1; //присваивание значения глобальной переменной a

int a; //описание локальной переменной a

//с этого момента и до конца блока действует

//только локальная переменная a

a=0; //присваивание значения локальной переменной a

. . . . . . . . .

return 0;

} //конец блока головной программы

float x=1.5;//определение и инициализация внешней переменной x

В этом примере:

глобальная переменная a определена вне всех блоков. Память под нее выделяется в сегменте данных в начале работы программы, областью действия и областью видимости является вся программа до оператора описания одноименной локальной переменной a,

локальные переменные b и c определены внутри блока, поэтому область их видимости – весь блок от момента их описания. Память под b выделяется в стеке при входе в блок и освобождается при выходе из него. Переменная с располагается в сегменте данных и существует все время, пока работает программа.

Если при определении начальное значение переменной явным образом не задано, то компилятор присваивает глобальным и статическим переменным нулевые значения соответствующего типа. Автоматические переменные в этом случае не инициализируются.

Описание переменной может выполняться в форме объявления или определения.

Объявление описывает свойства переменной, информируя компилятор о типе переменной и классе памяти. Определение содержит, кроме этого, указание компилятору о выделении памяти в соответствии с типом переменной, то есть связывает переменную с конкретной областью памяти. В Си большинство объявлений являются одновременно и определениями. В приведенном выше примере только описание:

extern float x;

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

Переменная может быть объявлена многократно, но определена только в одном месте программы.