IPB
ЛогинПароль:

> 

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> значения индекса, массив, указатель и не только...
сообщение
Сообщение #1


Человек
*****

Группа: Пользователи
Сообщений: 1 050
Пол: Мужской
Реальное имя: Станислав

Репутация: -  3  +


есть програмка (на FP)
program PointerArray;  
//на основе doc/ref/Types(3) / Pointers(3.4)
var i : Longint;
p : ^Longint;
pp : array[0..100] of Longint;
function proc():boolean;
var j: longint;
begin
proc:=true;
for j := 0 to 105 do
if p[j]<>pp[j] then proc:=false ;

end;
begin
for i := 0 to 100 do pp:= i; { Fill array }
p := @pp;
WriteLn (i:3);
if proc() then
WriteLn ('YES !')
else WriteLn ('Ohoh, problem !');
for i := 0 to 105 do begin
p := @pp[i];
WriteLn (i:3);
if proc() then
WriteLn ('YES !')
else WriteLn ('Ohoh, problem !');
end;
readln;
read;
end.
интересует строчка [i]p := @pp[0]; что знасит этот индекс(0)? если пишем p := @pp; все работает так-же, но если указываем другой индекс получаем проблемку...

Сообщение отредактировано: compiler -


--------------------
Спасибо!
Удачи!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Да, привел немного некорректный пример... Вот так будет лучше:

program InterestingTest;
var
i : Longint;
// Во-первых, строка - перед массивами, т.е, ты получаешь доступ НЕ к строке
s: string = 'compiler from pascal.net.ru';

p,p2 : ^Longint;
pp, pp2 : array[0..100] of Longint;

begin
// Заполняем массив кодами двоек, чтоб было четко видно границу...
for i := 0 to 100 do pp[i] := ord('2');

// А во второй массив пишем коды элементов строки
for i := 0 to length(s) do begin
pp2[i] := ord(s[i]); // <-- с нулевого индекса pp2
end;

p := @pp[100]; // Теперь начинаем смотреть с 100-го эл-та массива pp
for i := 0 to length(s) do begin
write(chr(p[i]));
end;
writeln;

readln;
read;
end.

Что имеем на выходе? Вначале - двойка, которая завершает массив PP, потом нулевой символ (откуда взялся - непонятно, попробую посмотреть позже), следующий символ (та самая стрелочка влево) - это длина строки = 27, проверяется элементарно: при компиляции с ключом {$H+} этого символа не будет. Ну, а потом - уже остальные символы...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Человек
*****

Группа: Пользователи
Сообщений: 1 050
Пол: Мужской
Реальное имя: Станислав

Репутация: -  3  +


спасибо, вроде разобрался... (кроме трех неизвестных символов)


--------------------
Спасибо!
Удачи!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.04.2024 13:27
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name