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

Оператор присваивания

Общая форма записи:

<объект>=<выражение>;

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

Примеры:

1.

main()

{

int i,j,k;

i=12; j=13;

k=i*j;

printf("\n%d * %d = %d",i,j,k); /* выведено 12 * 13 = 156 */

}

2.

main()

{

int i,j,k;

i=2;

j=i++; /* j=i i=i+1 */

k=++i+3; /* i=i+1 k=i+3 */

printf("\ni=%d j=%d k=%d",i,j,k); /* i=4 j=2 k=7 */

}

3.

main()

{

int i;

i=12*12;

printf("\nАдрес i=%p Значение i=%d",&i,i);

}

Примечание: в последнем примере вместо формата p можно использовать формат, например, d.

Организация множественных выражений

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

c=(h=12, b=h*2);

При этом вначале переменной h присвоится значение 12, далее вычислится значение b как h, умноженное на 2, и значение c станет равным b.

Комбинированные операции

С позволяет использовать некоторые сокращения при написании выражений, содержащих операции. Так, любое выражение вида

<объект>=<объект><операция><выражение>;

может быть заменено на

<объект><операция>=<выражение>;

Например:

a=a+b; заменяется на a+=b;

a=a-b; заменяется на a-=b;

a=a*b; заменяется на a*=b;

a=a/b; заменяется на a/=b;

a=a&b; заменяется на a&=b;

a=a|b; заменяется на a|=b;

Локальные и глобальные объекты

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

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

Пример:

int i=3; /* описание глобального объекта i целого типа */

main()

{

int j; /* описание локального объекта j целого типа */

j=i+2; /* i описывать не надо, она является глобальной */

printf("\ni=%d j=%d",i,j); /* i=3 j=5 */

}

Модификатор extern

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

Пример: два программных модуля, странслированных отдельно друг от друга.

1-й модуль:

int ___error,t; /* глобальные объекты ___error и t */

main()

{

. . .

}

2-й модуль.

test2() /* функция test2 */

{

/* тело функции */

extern int ___error; /* глобальный объект ___error */

int t; /* локальный объект t, не эквивалентный глобальному

объекту t в 1-м модуле */

... }

Статические и динамические объекты

В С объекты могут быть расположены по фиксированным адресам памяти - статические, либо в какой-то области памяти по мере их появления (обычно в стеке) - динамические. Динамические объекты, например, описанные внутри функции переменные, при каждом вызове функции могут располагаться по разным адресам памяти ЭВМ.

Все глобальные объекты являются статическими.

Все локальные объекты являются динамическими.

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

Пример:

static int a,b,c;

Регистровые переменные

Если необходимо, чтобы переменная располагалась в одном из регистров общего назначения процессора (что повышает скорость работы с ними - это бывает необходимо, например, при написании управляющих программ), то при описании используется модификатор register. Если будет описано слишком много регистровых переменных (больше, чем регистров общего назначения), то компоновщик часть из них сделает регистровыми, а часть простыми переменными, не предупреждая пользователя.

Примеры:

register int g;

register char f;

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