🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.pascal
Article #80358

Re: dynamiczna tablica (jeszcze raz)

#80358
From: Tomasz Minkiewicz
Date: Wed, 22 Oct 2003 15:45
58 lines
2508 bytes
On 20-10-2003 20:29, Solaris wrote:

> Probowalem cos takiego (fpc):
> 
> type Tcos = array [0..MaxLongint] of byte;
>        Pcos = ^Tcos;
> 
> var el : cardinal;
>       cos : Pcos;
> 
> begin
> el := 100;
> getmem(level,el * Sizeof(cardinal));
> cos^[150]:=1; // *
> writeln(cos^[150]);  //  i to pokazuje mi wartosc 1 a powinno np.0,
>                                 //zadeklarowalem tylko 100 elementow.

Zarezerwowałeś _miejsce_na_ 400 elementów.

> freemem(level,el * Sizeof(cardinal));
> end.
> 
> Co jest zle ?

Przykro mi, że muszę Cię zmartwić - nic nie jest źle i napisałeś
poprawny program. :-)
Ale tak jak robisz jest IMHO nieelegancko i niewygodnie, bo
tworzysz wskaźnik na tablicę o określonym rozmiarze (czyli
niezgodny ze wskaźnikiem na tablicę elementów tego samego typu,
ale o innym rozmiarze).

A to, co chcesz osiągnąć chyba lepiej zrobić tak (no chyba, że ja 
nie rozumiem, co chcesz osiągnąć):

var
  cos: ^byte;
  el: cardinal;
begin
  el := 100;
  getmem(cos, el * Sizeof(cos^));

  cos[50] := 1;
// równoważne, ale znacznie czytelniejsze od:
  (cos + 50 * SizeOf(cos^))^ := 1;
// równoważne, ale tylko w tym szczególnym przypadku!!!!!
  (cos + 50)^ := 1;

  writeln(cos[50]);
  freemem(cos, el * Sizeof(cos^));
end.

Tylko nie zapomnij, że cos[n] zawsze wskazuje na n-ty element typu
wskazywanego przez cos, natomiast (cos + n) już niekoniecznie,
czyli inaczej niż w C.

-- 
Tomasz Minkiewicz
tommink@space.pl
Technical Details
Message-ID: <1nz78douhhyc3$.dlg@TomMink.40tude.net>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!mat.uni.torun.pl!news.man.torun.pl!news2.icm.edu.pl!news.man.lodz.pl!not-for-mail
References: <bn19lb$1l7$1@nemesis.news.tpi.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!mat.uni.torun.pl!news.man.torun.pl!news2.icm.edu.pl!news.man.lodz.pl!not-for-mail
From: Tomasz Minkiewicz <tommink@space.pl>
Newsgroups: pl.comp.lang.pascal
Subject: Re: dynamiczna tablica (jeszcze raz)
Date: Wed, 22 Oct 2003 17:45:36 +0200
Organization: KGF UŁ
Lines: 58
Message-ID: <1nz78douhhyc3$.dlg@TomMink.40tude.net>
References: <bn19lb$1l7$1@nemesis.news.tpi.pl>
Reply-To: tommink@space.pl
NNTP-Posting-Host: 212.191.73.67
Mime-Version: 1.0
X-Trace: kujawiak.man.lodz.pl 1066837375 13529 212.191.73.67 (22 Oct 2003 15:42:55 GMT)
X-Complaints-To: abuse@man.lodz.pl
NNTP-Posting-Date: Wed, 22 Oct 2003 15:42:55 +0000 (UTC)
X-Face: $Q>U*H]s$ZYc}`~v"FCUNyRAe=jyIN'.~h\rty?&)RVi@:#ZLDxF!mLFQ~OI.]e[%!#X-Sc 8Zv52y%v&&}[rq<KwJ%`7@|rG7;[kx_qX|!E5i>Y`5!m8)?l47<;j`;W'bIlXF)~;20sqHAG[-p!]9 Z
User-Agent: 40tude_Dialog/2.0.5.1 Hamster/2.0.0.1
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit