Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Array index aus @ArrayElement bestimmen (https://www.delphipraxis.net/172997-array-index-aus-%40arrayelement-bestimmen.html)

mentaltec 1. Feb 2013 22:35

Delphi-Version: 5

Array index aus @ArrayElement bestimmen
 
sorry, ich steh grad auf'm Schlauch

gabs bei Delphi die Möglichkeit den Index eines Elements aus dessen Adresse zu ermitteln (dyn. Array)

so C-like :: idx := pItem - @Items[0]; ??

mentaltec 1. Feb 2013 22:55

AW: Array index aus @ArrayElement bestimmen
 
jaja, Selbstantwort

nicht schön, aber geht ::

idx := (PANSIChar(pItem) - PANSIChar(@Items[0])) div sizeof(TItem);

Volker Z. 1. Feb 2013 23:31

AW: Array index aus @ArrayElement bestimmen
 
Hallo,

Zitat:

nicht schön, aber geht ::
Schönheit liegt immer im Auge des Betrachters.

Delphi-Quellcode:
idx := (Integer (pItem) - Integer (@Items[0])) div SizeOf (TItem);

geht auch

Gruß

Furtbichler 2. Feb 2013 07:34

AW: Array index aus @ArrayElement bestimmen
 
Zitat:

Zitat von mentaltec (Beitrag 1201719)
so C-like :: idx := pItem - @Items[0]; ??

Stimmt doch nur für Byte-Arrays, oder? Für alle anderen Arrays musst Du doch auch in C so rechnen, wie in Delphi.

mentaltec 2. Feb 2013 08:36

AW: Array index aus @ArrayElement bestimmen
 
Zitat:

Zitat von Volker Z. (Beitrag 1201727)
Delphi-Quellcode:
idx := (Integer (pItem) - Integer (@Items[0])) div SizeOf (TItem);

ok, und was, wenn sizeof(pointer) <> sizeof(integer) ?

Gruss zurück

mentaltec 2. Feb 2013 08:45

AW: Array index aus @ArrayElement bestimmen
 
nö, ne "ordentliche" Programmiersprache kann das ;-)

mit (pItem + 2)-> kann man dann z.B. auf das übernächste Element zugreifen
oder was in Schleifen gern gemacht wird :
(pItem++)-> oder auch (++pItem)->

schönes WE

Furtbichler 2. Feb 2013 09:43

AW: Array index aus @ArrayElement bestimmen
 
Zitat:

Zitat von mentaltec (Beitrag 1201735)
nö, ne "ordentliche" Programmiersprache kann das ;-)

Falsch. Ein ordentlicher Makroassembler (aka 'C') kann das.

Eine ordentliche Programmiersprache kommt ohne Pointer aus. In 'C' hat man aber keine andere Wahl, als mit Pointern zu arbeiten, und dann gewöhnt man sich eben dran.

Ein Koch, der nur mit Tütengewürzen arbeitet, rafft eben einfach nicht, das es besser geht.

Hat was mit dem sprichwörtlichen Tellerrand zu tun.

Ach, und ganz so blöd ist Delphi nun auch wieder nicht:
Delphi-Quellcode:
inc(pItem)
bewegt pItem zum nächsten Element.

So mit das Einzige, was Du mit Delphi ggü C gottseidank nicht hinbekommst, ist, ein ganzes Programm in einer Zeile unterzubringen.

DeddyH 2. Feb 2013 10:18

AW: Array index aus @ArrayElement bestimmen
 
Zitat:

Zitat von Furtbichler (Beitrag 1201737)
So mit das Einzige, was Du mit Delphi ggü C gottseidank nicht hinbekommst, ist, ein ganzes Programm in einer Zeile unterzubringen.

Delphi-Quellcode:
program OneLine; {$APPTYPE CONSOLE} begin writeln('Hallo Welt'); readln; end.
:mrgreen:

Furtbichler 2. Feb 2013 13:58

AW: Array index aus @ArrayElement bestimmen
 
Zitat:

Zitat von DeddyH (Beitrag 1201741)
Zitat:

Zitat von Furtbichler (Beitrag 1201737)
So mit das Einzige, was Du mit Delphi ggü C gottseidank nicht hinbekommst, ist, ein ganzes Programm in einer Zeile unterzubringen.

Delphi-Quellcode:
program OneLine; {$APPTYPE CONSOLE} begin writeln('Hallo Welt'); readln; end.
:mrgreen:

Spielverderber. Ich meinte doch ohne Semikolon.

p80286 2. Feb 2013 23:35

AW: Array index aus @ArrayElement bestimmen
 
Kannst Du haben:
Delphi-Quellcode:
{$APPTYPE CONSOLE} begin writeln('Hello World') end.
Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:29 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz