![]() |
1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
![]() ![]() |
![]() |
lopata |
![]()
Сообщение
#1
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 99 Пол: Женский Реальное имя: vera Репутация: ![]() ![]() ![]() |
Только начала изучать указатели. Не совсем все понимаю. В частности не мог бы кто-нибудь объяснить простой пример :
program Pointer1; Не понятно почему указывает на первый элемент : PArr := @Arr; {PArr содержит адрес первого элемента массива Arr} и PArr := @Arr[i]; {PArr содержит адрес i-го элемента массива Arr} Совершенно непонятно что там делает Единица .Writeln(PArrA[1]); Объясните пожалуйста и Не ругайтесь, только). Действительно хочу разобраться. Сообщение отредактировано: lopata - 15.12.2009 17:51 |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата Не понятно почему указывает на первый элемент : Потому что нумерация элементов массива начинается с 1. И если указатель указывает (хм... А как еще сказать, чтоб не было "масло масляное"?) на массив - это значит, что он указывает на начальный элемент массива (еще точнее - на первый его байт). В твоем случае начальный элемент - первый. Если сделать так:type, то PArr будет указывать уже на нулевой (с индексом = 0) элемент массива. Цитата Совершенно непонятно что там делает Единица .Writeln(PArrA[1]); Ты сначала программу поправь, потом продолжим, а то у тебя сейчас ничего компилироваться не будет, а говорить просто так - я не буду... (нет, ну там понятно, что должно быть, но почему ты сразу не проверила, компилируется программа или нет? Кто ж разбирается с примером, не зная, рабочий ли он вообще?) |
lopata |
![]()
Сообщение
#3
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 99 Пол: Женский Реальное имя: vera Репутация: ![]() ![]() ![]() |
как бы тебе сказать...у меня все откомпилировалось...
PROGRAM Din; Добавлено через 8 мин. и зачем указывать на первый элемент массива? |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Цитата как бы тебе сказать...у меня все откомпилировалось... Видишь ли, PArrA[1] и PArr^[1] - это разные вещи, тебе не кажется? Программа, приведенная в первом посте компилироваться не будет.Цитата и зачем указывать на первый элемент массива? Затем, чтобы его напечатать. WriteLn ожидает в качестве параметров нечто, что он умеет печатать. (Это очень важно. Не просто список каких-то параметров, а именно тех, которые могут им обрабатываться). Теперь смотри, что происходило бы, если б мы передалиWriteLn(PArr^);... А ничего хорошего. У тебя переменная PArr описана как ^TArr, то есть, фактически, разыменовывая ее (добавляя справа значок "^"), ты получаешь WriteLn(Область_памяти_интерпретируемая_как_массив_типа_TArr); Но Write/WriteLn не умеют печатать массивы сразу, только поэлементно. Вот у тебя и выбор: либо получить ошибку "Не умею читать/писать переменные этого типа", либо передать что-то, что WriteLn умеет писать. А умеет она - только встроенные типы: всякие Integer-ы/Real-ы, String-и/Char-ы, и Boolean-ы. Никаких массивов... |
lopata |
![]()
Сообщение
#5
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 99 Пол: Женский Реальное имя: vera Репутация: ![]() ![]() ![]() |
|
![]() ![]() |
![]() |
Текстовая версия | 17.06.2025 17:28 |