значения индекса, массив, указатель и не только... |
значения индекса, массив, указатель и не только... |
compiler |
18.07.2007 16:34
Сообщение
#1
|
Человек Группа: Пользователи Сообщений: 1 050 Пол: Мужской Реальное имя: Станислав Репутация: 3 |
есть програмка (на FP)
program PointerArray;интересует строчка [i]p := @pp[0]; что знасит этот индекс(0)? если пишем p := @pp; все работает так-же, но если указываем другой индекс получаем проблемку... Сообщение отредактировано: compiler - 18.07.2007 16:35 -------------------- Спасибо!
Удачи! |
volvo |
18.07.2007 17:00
Сообщение
#2
|
Гость |
Цитата(compiler @ 18.07.2007 16:34) что знасит этот индекс(0)? Значит, что за точку отсчета при обращении к массиву через указатель, принимается нулевой элемент (в данном случае).Цитата(compiler @ 18.07.2007 16:34) если пишем p := @pp; все работает так-же, но если указываем другой индекс получаем проблемку... А вот смотри, почему ее получаем: первая итерация - p := @pp[0], при заходе в функцию Proc значение p[j] сравнивается с pp[j]. Поскольку в свою очередь, базовый индекс (та самая точка отсчета) P равняется 0, то P[j] = pp[base + j] = pp[j]. Что проверяется? Условие p[j] = pp[j]? Подставь то, что я написал, будет истина. Вторая (и последующие) итерации: базовый индекс больше нуля, следовательно в Proc проверяется условие pp[base + j] = pp[j] при base > 0. Если посмотреть, как ты заполнял массив pp, то понятно, что ни при одном base > 0 равенства не будет. Кстати, у тебя еще и выход за границу массива происходит, ты в курсе? |
compiler |
18.07.2007 17:31
Сообщение
#3
|
Человек Группа: Пользователи Сообщений: 1 050 Пол: Мужской Реальное имя: Станислав Репутация: 3 |
Кстати, у тебя еще и выход за границу массива происходит, ты в курсе? ага... и если p := @pp; и p := @pp[0]; обычно ведут себя одинаково то теперь они проявляют интересные свойства...
program InterestingTest;хотя... тест довольно не однозначный... куда мы получаем доступ обращаясь за границы массива? -------------------- Спасибо!
Удачи! |
volvo |
18.07.2007 17:43
Сообщение
#4
|
Гость |
Цитата куда мы получаем доступ обращаясь за границы массива? program InterestingTest;Теперь понятно, куда? |
compiler |
18.07.2007 17:58
Сообщение
#5
|
Человек Группа: Пользователи Сообщений: 1 050 Пол: Мужской Реальное имя: Станислав Репутация: 3 |
Теперь понятно, куда? не совсем... я получил следующий текст Цитата d***{символ}compiler from pascal.ne , где * -- пробел, а {символ} -- в данной кодировке есть некая стрелочка влево(!)Сообщение отредактировано: compiler - 18.07.2007 17:59 -------------------- Спасибо!
Удачи! |
volvo |
18.07.2007 18:48
Сообщение
#6
|
Гость |
Да, привел немного некорректный пример... Вот так будет лучше:
program InterestingTest;Что имеем на выходе? Вначале - двойка, которая завершает массив PP, потом нулевой символ (откуда взялся - непонятно, попробую посмотреть позже), следующий символ (та самая стрелочка влево) - это длина строки = 27, проверяется элементарно: при компиляции с ключом {$H+} этого символа не будет. Ну, а потом - уже остальные символы... |
compiler |
18.07.2007 19:05
Сообщение
#7
|
Человек Группа: Пользователи Сообщений: 1 050 Пол: Мужской Реальное имя: Станислав Репутация: 3 |
спасибо, вроде разобрался... (кроме трех неизвестных символов)
-------------------- Спасибо!
Удачи! |
Текстовая версия | 26.09.2024 12:30 |