Предмет: Информатика,
автор: haruniii
1. Выберите эквивалент следующего объявления:
"var a:array[20] of byte;"
а) var a:array[0..20] of byte;
б) var a:array[1..20] of byte;
в) синтаксическая ошибка - такое объявление недопустимо
2. Что выведет следующий фрагмент кода:
"n:= 2; p:=@n; p^:=1; Writeln('n=', n);?
а) n=1
б) n=2
в) ничего не выйдет
Ответы
Автор ответа:
3
№1
var a:array[20] of byte; - это объявление недопустимо.
По синтаксису языка в [...] указывается тип данных элементов массива.
20 - это не тип.
ответ в)
№2
n:=2;
p:=@n;
p^:=1;
Writeln('n=', n);
Это тема, которую в Паскале понимают не очень многие - работа с указателями.
n:=2 - тут все понятно. Константа 2 засылается в область памяти, которую называли n.
P:=@n; - здесь применена операция @, называемая "взятие адреса". Т.е. @n - это не значение n (которое у нас равно 2) , а тот самый адрес области памяти, где это значение размещено. И этот адрес будет помещен в переменную с именем p.
p^:=1; - если операция @ дает адрес, то операция ^ дает доступ к содержимому, находящемуся по указанному адресу. Мы записали в p адрес области памяти, в котором расположено содержимое n (оно равно 2), а теперь при помощи р^ получаем доступ к этому содержимому и меняем его на 1.
Вся эта "кухня равнозначна тому, что мы записали в n единичку. Она и будет выведена. Точнее будет выведена строка n=1.
Ответ a)
var a:array[20] of byte; - это объявление недопустимо.
По синтаксису языка в [...] указывается тип данных элементов массива.
20 - это не тип.
ответ в)
№2
n:=2;
p:=@n;
p^:=1;
Writeln('n=', n);
Это тема, которую в Паскале понимают не очень многие - работа с указателями.
n:=2 - тут все понятно. Константа 2 засылается в область памяти, которую называли n.
P:=@n; - здесь применена операция @, называемая "взятие адреса". Т.е. @n - это не значение n (которое у нас равно 2) , а тот самый адрес области памяти, где это значение размещено. И этот адрес будет помещен в переменную с именем p.
p^:=1; - если операция @ дает адрес, то операция ^ дает доступ к содержимому, находящемуся по указанному адресу. Мы записали в p адрес области памяти, в котором расположено содержимое n (оно равно 2), а теперь при помощи р^ получаем доступ к этому содержимому и меняем его на 1.
Вся эта "кухня равнозначна тому, что мы записали в n единичку. Она и будет выведена. Точнее будет выведена строка n=1.
Ответ a)
haruniii:
Спасибо!
Похожие вопросы
Предмет: Алгебра,
автор: akka7142
Предмет: Английский язык,
автор: daniilanohin4
Предмет: Литература,
автор: alinachuprina08
Предмет: Математика,
автор: Фанта12
Предмет: Математика,
автор: 2005Анимешник