Dodaj do ulubionych

Wskaźnik pointer w pascalu

04.01.06, 11:21
Chciałbym coś wiedzieć wiecej na temat wskaźnika pointer. Głównie chodzi mi o
to jak wykorzystywać go do celów do których sie wykorzystuje wskaźniki
wskazujące na zmienne danego typu. Np przypisujemy adres zmiennej statycznej
(w:=@a;)i do tej zmiennej coś wpisujemy lub tworzymy zmienną dynamiczną
wskazywaną przez wskaźnik (new(w)); i np coś tam wpisujemy, dodajemy itp.
Operacje o których piszę można zrobić na wskaźnikach wskazujących jakieś typy
a nie potrafię zrobić tego na pointerze (podobno jest uniwersalny i może
wskazywać na zmienne jakiegokolowiek typu)- przynajmniej nie da się zrobić
tego w ten sam sposób, co z innymi wskaźnikami.
Obserwuj wątek
    • alsor Re: Wskaźnik pointer w pascalu 07.01.06, 02:47
      Pointer jest bezużyteczny - można go zastąpić (nawet trzeba) dowolnym innym
      wskaźnikiem.

      var p : pointer;
      s : PChar;
      pi : PInteger;

      n : integer;
      t : array[0..888] of BYTE;

      p := @n; { teraz nic z tym nie można zrobić... }
      p^ := 7; { błąd }

      pi := PInteger(p);
      pi^ := 7; { ok }
      { albo }
      PInteger(p)^ := 7;

      s := PChar(n);
      s[0] := #7;
      s[1] := #1;
      writeln(n); { 256 + 7 }

      s := PChar(@t[0]);
      s[0] := 'p'; {
      inc(s, 77);
      s[0] := 'q';

      (s+7)^ := char(64);

      i takie tam... nie wiem do czego komu ten pointer?
      zwykłe 4 bajty adresu i tyle w tym magii.
          • alsor Re: Wskaźnik pointer w pascalu 08.01.06, 20:38
            typy wskaźnikowe:

            type
            PChar = ^char; { wskaźnik na zmienną typu char }
            PInteger = ^Integer; { na integer }
            PReal = ^real;

            nazwy tych typów mogą być dowolne, ale jest tajna konwencja - zaczynamy od p.

            WskNaCharakterek = ^char; { wsk. na char - jak PChar }

            record TPointf x, y, z, w : single; end;
            PPointf = ^TPointf; { wsk. na rekord TPointf }

            Wskaźniki są głównie potrzebne do manipulowania na tablicach dynamicznych, ale
            jest to domena C, w paskalu mamy ograniczone możliwości.

            s : PChar;

            GetMem(s, 1000);
            { s wskazuje na blok 1000 znaków 0..999 }

            s[0] := 'm';
            s[1] := '9'; { działa jak tablica }
            s[777] := '9';
            FreeMem(s, 1000);

Popularne wątki

Nie pamiętasz hasła

lub ?

 

Nie masz jeszcze konta? Zarejestruj się

Nakarm Pajacyka