Pointer a tömbhöz

Egy mutató egy tömbhöz

Alázattal válaszoljon. Mint a Delphi mutató a Real Array-hoz
a tömb meghatározott elemére lefordítva. Ha ez C ++-ben történik meg
ha p [i] -t írunk, majd Delphi-ban # xA0, az első elem, amelyet megmutat és bármely más
nem akarja.

A sablon megrepedt.
Fordítsd oroszul.

Nincs szükség mutatóra. A Delphi-ban ez könnyebb:

var
# xA0; P: tömb [0..9] kiterjesztett; // real egy elavult típus.
.
# xA0; i: = 0 és 9 között
# xA0; # xA0; P [i]: = 1;

Vagy dinamikus tömbökkel:

típus
# xA0; TP: kiterjesztett tömb;
var
# xA0; P: TP;
.
# xA0; SetLength (P, 10);
# xA0; i: = 0 és 9 között
# xA0; # xA0; P [i]: = 1;

> Két sorrend van, attól függően, hogy a Checkbox milyen állapotban van feldolgozva
elemek egyike vagy a másik


típus
TDAExt = bővített tömb;
var
Arr1, Arr2, Temp: TDAExt;

kezdődik
ha Checkbox1.Checked majd
# xA0; Temp: = Arr1
más
# xA0; Temp: = Arr2;
a Temp do
kezdődik
végén;
végén;

var
# xA0; arr: array [False..True] az Integer tömbje;
kezdődik
# xA0; arr [CheckBox1.Checked].
végén;

Lehetséges az IfThen keresztül vagy más módon:


var
arr: tömb [logikai] az Integer tömbben;
kezdődik
arr [CheckBox1.Checked].
végén;

A C ++-ben a mutatók már kiderült?
Akkor örülök. A Delphi mutatók a sichnyasoktól nem különböznek egymástól. Ha nem érted, akkor miért kellett hozzá C ++-t?


> Ha nem írsz sokszor, ha.

Miért írja újra ugyanazt a dolgot? Írj egyszerre.

Ugyanaz. Hogyan lehet a tömbön mutató mutató a tömb i-edik elemének megkapására?


Mindazonáltal. mivel a tömb mutatója az i-edik elemet kapja
> tömb?

ha a "mutató a tömbhöz", akkor majdnem olyan, mint a C, P ^ [i], feltéve, hogy P típus típusú ^ tömb [határok].

const
# xA0; arr. tömb [0..2] kiterjesztett = (1.3,0.3,5.4);

eljárás TForm1.Button1Kattintson (Feladó: TObject);
var
# xA0; kibővített;
# xA0; a. hosszabbítani;
kezdődik
# xA0; p: = @arr;
# xA0; a: = p ^ [1];
végén;

[Error] Unit1.pas (36): Array típus szükséges

Megértem, hogy valami hülye hibát követtem el.

> [Hiba] Unit1.pas (36): Array típus szükséges
mutató soha nem tömb. nem kell keverednie a szintaxist.

> Hihetetlen hibát követtem el.
nem hülye, idióta. Megpróbálsz írni a Delphi C-re.
2 jó példa, mint nem gondoskodik?

p van mutatója kiterjesztésre, de mutatót kell tenned egy kiterjesztett tömbhöz. "Általánosságban elmondható, hogy egyáltalán nincs szükség mutatóra.


> # xA0; És a kurzor aritmetikája nem igazán tetszik

Ami az.

A karaktermutatók korlátozzák

> A + és - operátorok segítségével növelheti és csökkentheti az eltolást
> karakter mutató. Használhatja - a különbség kiszámításához
két eltolódás között.

És csak a átnevezések működése gyakori.

típus
# xA0; PExtended = ^ Kiterjesztett; // mutató egyetlen kiterjesztésre
# xA0; TExtendedArray = tömb [0..MaxInt div Sizeof (Extended) -1] kiterjesztett;
# xA0; PExtendedArray = ^ TExtendedArray; // szinte mindaz, amire szükséged van

const
arr. tömb [0..2] kiterjesztett = (1.3,0.3,5.4);

eljárás TForm1.Button1Kattintson (Feladó: TObject);
var
o. PExtendedArray;
a. hosszabbítani;
kezdődik
p: = @arr;
a: = p ^ [1]; // Most működnie kell
végén;
de munkálkodni Sishnoy-nál, ez divatos

const
arr. tömb [0..2] kiterjesztett = (1.3,0.3,5.4);

eljárás TForm1.Button1Kattintson (Feladó: TObject);
var
o. Bővített; // ugyanaz
a. hosszabbítani;
I: Integer;
kezdődik
p: = @arr;
a: = 0;
az I: = 0 és 2 között kezdődik
a: = a + # xA0; p ^;
Inc (p); // szinte p ++
végén;
végén;


> A karaktermutatók korlátozzák

Vannak Inc és Dec. Ha Th.

és végül a generált asm kód nem lesz jobb, de sokkal rosszabb, mint [2]. de egyáltalán nem rossz. hogy alkalmassá tegye a delfint a "jól, ez a mocskos hal mocskos" stílusában.

Úgy tűnik, ő maga nem akarta, hogy az írástudatlanság hiánya miatt a gyengékre mutatott
Helyezze el a Delphit. Kiderül, hogy 2 tömb helyett három,
a harmadik - mesterséges - az egyik szükséges, vagy két egyszerű tömb helyett egy többdimenziós, vagy # xA0, írj egy csomó típust.


Úgy tűnik, ő maga nem akarta, hogy az írástudatlanságát megérintette
> gyenge
> Helyezze el a Delphit.

Úgy néz ki, mint "X, Y, Z"

Kérem, ne fusson, úgy tűnt számomra, hogy minden könnyebb lesz.

> Delphi gyenge pontja.
a gyenge elmék gyenge pontja.
több lehetőséggel, hogy figyelmen kívül hagyja a normális, válassza ki a leginkább perverz, és miután gloating, "ah, itt!" nem teheti meg. "

------------------------
Kemény orosz muzhik japán láncfűrésszé tették, és megpróbálta tesztelni, a fűrészlapon
- Ütés! - mondta Saw, és fűrészelt egy fadarabot.
- Ah, b **! - mondta a szigorú orosz muzhik, és tolt egy táblát a fűrészbe.
- Hozd el! - mondta Saw és megpillantotta a táblát.
- Wu, b **! - mondta a szigorú orosz muzhik, és egy fűrészt ragasztott a fűrészbe.
- Vzhzhzhzhik! - mondta Saw, és megpillantotta a rönköt.
- Wu, b **. - mondta a szigorú orosz férfiak, és a fűrészt a fűrészbe helyezte.
- Hrrr-jin - mondta a fűrész és eltört.
- Ah-ha, b **. - mondta a szigorú orosz parasztok, és elment, hogy levágja az erdőt tengelyekkel.

> mintha minden könnyebb lenne.
Mi összetett [2].

Amennyire megértem, valószínűleg rossz, javasolja Jurij Zotov
másolja át a kívánt tömböt és dolgozzon vele. Természetesen. ez könnyű. Annyira vagyok
gondoltam, de remélte # xA0, hogy tanácsot adjak valami érdekesebbnek.


Azt gondoltam, de reméltem # xA0, hogy tanácsot adjak valami érdekesebbnek.

Öld meg magadat, mentse a világot.
De ne, ne ölj. Menj dolgozni. A fizetésem emelkedni fog, ha ilyen sok lesz.


> [29]

A feladat így tűnik így:

típus
# xA0; PMyData = ^ TMyData;
# xA0; TMyData = tömb [0..9] kiterjesztett;

var
# xA0; MyData: array [Boolean] a TMyData = (
# xA0; (1.1, 2.2, ...),
# xA0; (5.5, 6.7, ...)
# xA0;);

funkció ConquerTheWorldWith (const AData: TMyData);
kezdődik
...
végén;

> készítsen egy másolatot a kívánt tömbről és dolgozzon vele.
honnan a "droves"? [2] nincsenek másolatok vagy tanácsok, hogy azokat.

de reméltem # xA0, hogy tanácsot adjak valami érdekesebbnek.
és hogyan lehetséges ez, ha nincs probléma? de az a tény, hogy van fordítás az orosz nyelvre.

> A feladat így tűnik így:
ügyeljen arra, hogy ne adja meg a kódot olyan személynek, aki nem ismeri az alapokat. mindent megért a bemutató "görbe tükrén" keresztül. nagyon görbe, a delfinek nem tud semmit, C szerint úgy tudja, hogy tudja.

most # xA0, újra lesz következtetés a "rossz hal" stílusában.

A C és a Delphi ismeretei jelentéktelenek, ezért kérdezem a sajátomat
kérdéseket. Nagyon hálás leszek, ha elmagyarázzák nekem, amit nem értettem a tanácsban
Yuri Zotov.

> Yuri Zotov azt javasolja, hogy készítsen egy másolatot a kívánt tömbről és dolgozzon vele.

Sokáig kerestem, hol ajánlottam. Nem találta.

A Delphi mutatói használata NINCS KIVÉTEL A SYNTAX nem különbözik a C-os hányadosokkal való munkától és "gyenge pontok" nélkül. Nincs gyengeség - az összes SAME, mint az S.

A [11] -ben már mindent írtál. Egyetlen hiba, amit már rámutatott [13]. Mi van még akkor?

típus
# xA0; TArr. tömb [0..2] kiterjesztett;
# xA0; PArr = ^ TArr;

const
# xA0; arr. TArr = (1,3,0,3,5,4);

eljárás TForm1.Button1Kattintson (Feladó: TObject);
var
# xA0; Parr; // Mutatóra van szükségünk a MASSIVE-hoz, nem kiterjesztve
# xA0; a. hosszabbítani;
kezdődik
# xA0; p: = @arr;
# xA0; a: = p ^ [1];
végén;

> o. Parr; // Mutatóra van szükségünk a MASSIVE-hoz, nem kiterjesztve
mi a különbség, legyen a mutató a kiterjesztett

const
# xA0; arr. tömb [0..2] kiterjesztett = (1.3,0.3,5.4);

eljárás TForm1.Button1Kattintson (Feladó: TObject);
var
# xA0; kibővített;
# xA0; a. hosszabbítani;
kezdődik
p: = @arr;
a: = p ^;
végén;

ugyanaz. hiszen a mutatókon keresztül akarok lenni. de csak nem kell, mint egy kutya ötödik lábát. (ez egyáltalán nem, de az "itt")

Köszönöm, most minden világos. Elnézést kérek az ostobaságért és a beavatkozásért.


> A tanácsban [2] nem értettem, hogy miért kell a tömb minden elemét rendelni 1

facepalm.jpg

A kép kitöltése:

De az építőiparban [38] azt mondtuk a fordítónak, hogy a p változó egy számot jelez, nem tömböt. És nem alkalmazhatjuk az indexet NUMBER értékre, így az a változó tartalmazza a tömb ZERO elemét.

És az építőiparban [35] azt mondtuk a fordítónak, hogy a p változó maga a tömbre mutat. Ezért alkalmazhatjuk az indexet és az a változó tartalmazza a tömb FIRST elemét, mivel az index 1 explicit módon van megadva.

const
# xA0; arr. szöveg # xA0; = (1,3,0,3,5,4);

eljárás TForm1.Button1Kattintson (Feladó: TObject);
var
# xA0; PExt;
# xA0; a. hosszabbítani;
# xA0; i. integer;
kezdődik
# xA0; i: = 1;
# xA0; p: = PExt (egész (@arr) + i * SizeOf (Extended));
# xA0; a: = p ^;
végén;

Ők, de csak a színfalak mögött

Ezért [2] -ben azt mondták, hogy az adott elemhez való hozzáférés egyszerűbb lehet, mutatók nélkül.


Most csak elmondaná nekem, hogyan működnek ebben az esetben?

A. Úgy látom, megértem. De ez nem az a számtani, hogy a C. Vagy tévedek?

Dec - ugyanakkora összeggel csökken.


De C-ben, ha a szklerózisom nem változik meg, egyszerű
számtani műveletek a mutatókon. Ami nem függ
> amit ez a mutató mutat.


eljárás TForm8.Button1Click (Sender: TObject);
var
# xA0; i: Integer;
# xA0; p: PInteger;
# xA0; arr: array [0..1] Integer;
kezdődik
# xA0; arr [0]: = $ 44332211;
# xA0; arr [1]: = $ 88776655;

# xA0; p: = @arr [0];
# xA0; i: = 1-től 4-ig
# xA0; kezdődik
# xA0; # xA0; Cardinal (p): = bíboros (p) + 1;
# xA0; # xA0; Memo1.Lines.Add (IntToHex (p ^, 8));
# xA0; vége;
végén;


> Ez nem felel meg * (p + 1)

Bíboros (p): = bíboros (p) + 1;
Ugyanaz a tojás, csak az oldalán.


> Opció # xA0; (2010.08.16. 08:48) [54]
> Ez nem felel meg * (p + 1),

És mi a különbség?

Ehhez az Inc is


> # xA0; # xA0; mutató a char számára nincs különbség

Nem ezek a tiéd. És mi itt télen a szex, megváltoztatjuk a PChar-t PByte-be

Ui Általában nem én vagyok az első alkalom, hogy olyan tisztán téveszmén találkoztam, hogy "csak PChar" használható. És olyan emberekkel, akikkel soha nem gondoltam volna.
Milyen régi Turbo Pascal, vagy ott Delphi 3?


Ez itt a tiéd. És mi télen itt vagyunk, változnak
> PChar a PByte-ban

És én nem csak Si :-) By the way, Pbyte felel meg többet # xA0; aláírás nélküli char *. Az igaz char egy szélesebb karakter # xA0; pascalban.
És van egy különbség a si számára. A típusok ellenőrzése gyengébb. De az eredményt meg lehet szerezni egy másik # xA0; és a programban a C-t, ha összekevered a típusokat.


> Opció # xA0; (2011.08.16. 09:11) [58]

Tehát ne adj meg 1 sizeof (elemet)

Char SI-ben nem karakter


> Char az SI-ben nem egy char

szar az SR-ben nem csak Char LOL :-)

> 1 implicit módon szorozva sizeof (elem típus).
Ugyanez teszi a

> vagy tekinthető. hogy a mutató a karakter típusától függ a fordítótól
De ez komoly csapda. Ugyanez a forráskód viselkedhet másképp.

> Cardinal (p): = Cardinal (p) + 1;, ahol P a mutató, valószínűleg
> a delphi-ban hiba lesz.


> Bíboros (p): = bíboros (p) + 1;, ahol P a mutató, inkább
> minden a delphiben hiba lesz.

eljárás TForm8.Button1Click (Sender: TObject);
var
i: Integer;
p: PInteger;
arr: tömb [0..1] egész szám;
kezdődik
arr [0]: = $ 44332211;
arr [1]: = $ 88776655;

p: = @arr [0];
i: = 1-től 4-ig
kezdődik
# xA0; Bíboros (p): = bíboros (p) + 1;
# xA0; Memo1.Lines.Add (IntToHex (p ^, 8));
végén;
végén;

Eredmény Memo1-ben:
55443322
66554433
77665544
88776655

Minden a terveknek megfelelően.


Nem értettem ezt a kifejezést, mit?

A bolond bolond háza, a charre

Mint a különbség magyarázta, vagy nem egyértelműen magyarázható? # xA0; Megpróbálhatok példát például, ha szükséges?

És mi a helyzet a gazdagabb vagy szegényebbekkel, # xA0: Őszintén szólva nem érdekel, hogy melyik nyelv gazdagabb vagy szegényebb, fontos nekem, melyik egyik kényelmesebb egy vagy másik célra. És mindaz, amit te csinálsz, amikor a mutatót számsorba alakítod, akkor ugyanúgy teheted a si-t, hidd el. És itt nem lehet osztani a mutatót sem, sem ott ;-) Most gyakran bizonyos problémákban használom a nyelvet általában mutatók és megragadások nélkül


> # xA0, Mostanában gyakran problémákba ütköznek a nyelv általában
> mutatók nélkül és hiányzik

Az oroszban a mutatók nélkül rossz. Különösen a metró közepén.


> # xA0; Miért van ez így? Mi lehet a problémák lehetősége?

Csak megmutattam a lehetőséget, hogy mind az Inc, mind a casting típusok révén.
Hogyan tudom személyesen csinálni? A feladattól függően.

És mit csinál ez a kód?


> És mit csinál ez a kód?

A jegyzet betölti a számokat.


> A jegyzet kitölti a számokat.

Adok tanácsot az optimalizálásról, ez könnyebb:

csak egy vonal 16-tal szemben

Nos, nincsenek kifejezett jelek (irányok)

És mindig is, hogy ne lazítsak, ma egy ilyen süllyedő példa,
kérdés a bal oldalon.
És általában, mindkét változat ugyanazt az összeszerelő parancsot eredményezi.


> Jó, hogy még nincs DELPHI64.

Nos, gyakorlatilag van

> Milyen adatfajtafordítás örömei készülnek?

A mutató 8 bájt lesz.

Bolondok és utak akadályozzák, csak bolondok.

> Opció # xA0; (2010.08.16. 15:46) [88]

Anatolikus agya már régen új minőségi állapotba került, többszöri, szupermetmoszív idiomatikus konstrukciókat generálva)

Kapcsolódó cikkek