Задачи по языку С


         

Классы памяти 3.1


int i=1; i.0=1.
main() {
auto int i, j; Переменные i.1 и j.1 определяются, но значений у них нет.
i.1=reset(); В качестве значения i.1 получает результат, возвращаемый reset.
reset() {
return(i.0); Поскольку reset не имеет параметров и локальных переменных с именем i, то появление i относится к i.0. Функция reset выдает 1, так что i.1=1.
}
for ( j.1=1; j.1<=3; j.1++ ) { j.1=1.
PRINT2(d,i.1,j.1); PRINT1(d,next(i.1)); int next(1)
{ (int i=1;) j.next=1.
return( j.next=i.0++ ); i.0=2, но next выдает 1, так как операция увеличения выполняется после того, как будет взято значение i.0.

Оператор возврата ссылается на i.0, так как в next нет других переменных с именем i. После выполнения оператора возврата j.next исчезает.

} PRINT1(d,last(i.1)); int last(1)
{(int j=1;) j.last=1.
static int i=10; i.last=10.

В last есть своя переменная с именем i, инициируемая значением 10. Класс памяти i - static, а это означает, что i инициируется при загрузке программы и исчезает, когда программа заканчивается.

return(j.last=i.last--); Переменная i.last=9, но выдается значение 10, так как уменьшение переменной происходит после использования ее значения.

После возврата j.last исчезает, но i.last остается, и когда вновь обращаемся к last, то i будет равно 9.

} PRINT1(d,new(i.1+j.1)); int new(2)
{(int i=2;) i.new=2.
int j=10; j.new=10.
return(i.new=j.new+=i.new); j.new=12, i.new=12 и выдается значение 12.
} После возврата j.new и i.new исчезают.
for ( j.1=1; j.1<=3; j.1++ ) { j.1=2.

Возвращаемся к оператору for. Для этого шага опишем в общих чертах действие каждого оператора.

PRINT2(d,i.1,j.1); Выполнение тела цикла приводит к увеличению j.1 на 1, но значение i.1 не меняется.
PRINT1(d,next(i.1)); Функция next игнорирует значение передаваемого параметра и возвращает текущее значение i.0. Побочным эффектом выполнения next будет увеличение i.0 на 1.
PRINT1(d,last(i.1)); Функция last также игнорирует значение передаваемого параметра. Выдается текущее значение локальной статической переменной i.last. Побочный эффект выполнения last - уменьшение i.last на 1.
PRINT1(d,new(i.1+j.1)); Функция new выдает значение своего параметра плюс 10. Побочных эффектов нет.
} }




Содержание  Назад  Вперед