Предмет: Информатика,
автор: live131
type ref = ^integer;
var p, q: ref;
Пусть p^=5 и q=p.
Что будет выдано на печать в результате выполнения следующих операторов?
q^:=p^+1;
if p<>q then p:=nil else q^:=10;
if q^=10 then begin p:=q; q^:=20; end;
writeln(p^);
Ответы
Автор ответа:
1
Если q=p, то оба указателя ссылаются на одно и то же место в памяти, т.е. значения p^ и q^ всегда будут одинаковы.
После p^=5 оба указателя будут ссылаться на 5.
q^:=p^+1 приведет к тому, что cсылка будет на 6, поэтому в первом if условие ложно и выполняется ветка else и оба указателя будут ссылаться на 10.
Во втором if условие истинно, поэтому выполняется ветка then. В ней присваивание p:=q ничего не меняет, поскольку оба указателя и так уже указывают на одно и то же место в памяти. А после q^:=20 в это место будет записана константа 20, поэтому при выводе p^ мы получаем значение 20.
Ответ: 20
После p^=5 оба указателя будут ссылаться на 5.
q^:=p^+1 приведет к тому, что cсылка будет на 6, поэтому в первом if условие ложно и выполняется ветка else и оба указателя будут ссылаться на 10.
Во втором if условие истинно, поэтому выполняется ветка then. В ней присваивание p:=q ничего не меняет, поскольку оба указателя и так уже указывают на одно и то же место в памяти. А после q^:=20 в это место будет записана константа 20, поэтому при выводе p^ мы получаем значение 20.
Ответ: 20
Похожие вопросы
Предмет: Русский язык,
автор: Belacha2005
Предмет: Немецкий язык,
автор: Kei4an
Предмет: Русский язык,
автор: oaoaoaoaoa
Предмет: География,
автор: e20050806
Предмет: Английский язык,
автор: Bogdanova2401