Pointer/fi
│
Deutsch (de) │
English (en) │
suomi (fi) │
français (fr) │
русский (ru) │
Pointer:lla eli osoittimella on kaksi merkitystä Free Pascalissa:
- Termi tai käsite luokka tyyppien tyypeistä ja muuttujista
- Yksinkertainen tietotyyppi, joka voi pitää sisällään minkä tahansa tietotyypin osoitteen
Alustus
Pointer on osoitinmuuttuja, joka sisältää muuttujan paikallisen tai globaalin (kaikkialle näkyvän) muistiosoitteen tai muistin osoitteen, jonka arvo tai monimutkainen objekti on luotu ja tallennettu ohjelman heap muistiin.
Voidaan sanoa sen olevan viittaus arvoon / muuttujaan tai se "osoittaa" arvoa / muuttujaa.
Kaikkien datatyyppien kohdalla kyseiselle datalle osoitintyyppi voidaan ilmoittaa operaattorilla ^ tietotyypin edessä.
Kääntäjän ohjeen {$ TYPEDADDRESS ON}
asetuksella (on suositeltava käyttää) osoittimet voivat osoittaa vain saman tyyppisten muuttujien tai arvojen osoitteisiin, joihin ne on tarkoitettu osoittamaan.
Osoitinmuuttujille annetaan muuttujan osoite @ -operaattorilla, ja niille liitetään arvon / objektin osoite heap-muistiin käyttämällä New aliohjelmaa.
Osoitinmuuttujan arvon lukeminen tai kirjoittaminen onnistuu viittaamalla siihen ^
-operaattorilla.
program test_pointer_wiki2;
{$TYPEDADDRESS ON}
var
a : Integer = 100;
b : Real = 10.5;
ptrToInt : PInteger; // PInteger on pointer tyyppi joka on määritelty RTL
// sillä voidaan osoittaa ainoastaan integer arvoon/muuttujaan
ptrToInt2 : ^Integer; // Yleinen muoto määrittämään osoittimen tyyppiä
//ptrToInt := @b; // Käännösvirhe {$TYPEDADDRESS ON}
ptrToInt := @a;
//Writeln(ptrToInt); // Käännösvirhe: Error: Can't read or write variables of this type
Writeln(ptrToInt^); // Tulostaa arvon: 100
New(ptrToInt2); // allocate an un-initialized Integer on the heap
Writeln(ptrToInt2^); // Näyttää "satunnaisen" integer arvon eli kokonaisluvun
ptrToInt2^ := 222; // Asetetaan arvo 222 heap-muistiin
Writeln(ptrToInt2^); // Tulostaa arvon 222
end.
Datan tyyppi
Osoitin- tietotyyppi (Pointer) on yksinkertainen tyyppi, joka voi sisältää minkä tahansa datatyypin muuttujan tai arvon.
Tämä on päinvastoin kuin kirjoitetut osoittimen muuttujat (esim. PInteger), jotka voivat osoittaa vain tietyn tyyppisiä muuttujia tai arvoja kääntäjänohjeella {$ TYPEDADDRESS ON}
.
Esimerkiksi:
{$TYPEDADRESS ON}
Var
a : Integer = 20;
b : Real = 20.5;
c : Boolean = true;
ptr : Pointer;
begin
ptr := @a; // valid to hold Integer address
ptr := @b; // valid to hold Real address
ptr := @c; // valid to hold Boolean address
end.
Mutta ennen osoitin muuttujaa voidaan käyttää, se täytyy
- valita sellainen arvo tai muuttujatyyppi, johon se viittaa
- viitataan ^ operaattorilla
Esimerkiksi:
Var
a : Integer = 20;
ptr : Pointer;
begin
ptr := @a; // valid to hold Integer address
//Writeln(ptr); // Invalid - will not compile
// Error: Can't read or write variables of this type
//Writeln( ptr^); // Error: Can't read or write variables of this type
// Just de-referencing a Pointer variable is not sufficient
Writeln( PInteger(ptr)^); // After cast, then de-reference: prints 20
end.
Esimääritellyt Pointer tyypit
Runtime-kirjaston System unit on määritelty useita osoittyypejä sisäänrakennetuille muuttujille, mukaan lukien:
PSmallInt = ^Smallint;
PShortInt = ^Shortint;
PInteger = ^Integer;
PByte = ^Byte;
PWord = ^word;
PDWord = ^DWord;
PLongWord = ^LongWord;
PLongint = ^Longint;
PCardinal = ^Cardinal;
PQWord = ^QWord;
PBoolean = ^Boolean;
Katso myös
Yksinkertaiset datatyypit |
|
---|---|
Monimutkaiset datatyypit |