AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Zeiger auf array

Ein Thema von Martin K · begonnen am 12. Mai 2006 · letzter Beitrag vom 15. Mai 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#1

Zeiger auf array

  Alt 12. Mai 2006, 22:07
Hi, hab mal wieder ein Problem:

Ich habe mir zwei statische Arrays gebastelt und einen Pointer, der auf eines der beiden Arrays zeigen soll.

Delphi-Quellcode:
var
  Palette4: array[0..15] of TColor;
  Palette8: array[0..255] of TColor;
  Palette: PByteArray;
Wahrscheinlich habe ich meinen Pointer falsch deklariert oder so, aber auf jeden Fall kommt das bei raus:

Ich lasse also meinen Pointer auf eines der beiden Arrays zeigen:
  Palette := @Palette4; Bei High(Palette) müsste dann (zumindest nach meiner Logik) 15 raus kommen, ich erhalte aber 32768.

Woran kann das liegen?
Wie muss ich meine Deklaration ggf. ändern?
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Zeiger auf array

  Alt 12. Mai 2006, 22:30
Hallo Martin,

so sieht die Deklaration von PByteArray in der Unit SysUtils aus:

Delphi-Quellcode:
PByteArray = ^TByteArray;
TByteArray = array[0..32767] of Byte;
High(Palette^) muß somit den Wert 32767 liefern.

Die Obergrenzen der Arrays kannst du ja über High(Palette4) bzw. High(Palette8) abfragen, mit einer gemeinsamen Typvereinbarung wirst du wohl scheitern.
Vielleicht hilft dir eine Prozedur mit einem "open array"-Parameter:

Delphi-Quellcode:
procedure MachWas (const aColors: array of TColor);
begin
  ShowMessage (IntToStr(High(aColors)));
end;

MachWas (Palette4); // zeigt "15" an
MachWas (Palette8); // zeigt "255" an
Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Zeiger auf array

  Alt 12. Mai 2006, 22:40
Hm...

Gibt es keinen allgemeinen Pointer, mit dem man auf ein Array zeigen kann?

Also ich würde gerne überall im Code einfach nur Palette:= usw. schreiben.
Und je nachdem, auf welches der beiden arrays dann der Pointer zeigt (lege ich ganz am Anfang fest, z.B. bei FormCreate), dieses array soll halt auch verwendet werden...

Zitat von Hawkeye219:
High(Palette^) muß somit den Wert 32767
Ja, stimmt so wars auch.
Hatte den Code nur nicht mehr ganz genau im Kopf...
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
nat

Registriert seit: 10. Nov 2005
216 Beiträge
 
RAD-Studio 2009 Pro
 
#4

Re: Zeiger auf array

  Alt 13. Mai 2006, 00:06
was spricht gegen dynamische arrays? damit würde es gehen!

Delphi-Quellcode:
type
  TColorArray = array of TColor;
  PColorArray = ^TColorArray;

var
  Palette4: TColorArray;
  Palette8: TColorArray;
  Palette: PColorArray;

procedure TForm1.FormCreate(Sender: TObject);
begin
  setlength(Palette4, 16);
  setlength(Palette8, 256);

  Palette := @Palette4;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Zeiger auf array

  Alt 13. Mai 2006, 00:11
Ach, damit geht das?

Hm...
Aber warum geht das mit dem Zeiger auf ein Array nur bei dynamischen und nicht bei statischen?
...das ist doch unlogisch!

Naja gut, dann nehm ich eben zwei dynamische Arrays.
Danke, übrigens!!!

Hier geht es halt um Farbpaletten (4 Bit und 8 Bit) und da die Anzahl der Farben in der Palette konstant ist (16 bzw. 256 Farben), wären hier statische Arrays irgendwie logischer...

Aber egal...
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.993 Beiträge
 
Delphi 12 Athens
 
#6

Re: Zeiger auf array

  Alt 13. Mai 2006, 10:17
Zitat von Martin K:
Aber warum geht das mit dem Zeiger auf ein Array nur bei dynamischen und nicht bei statischen?
...das ist doch unlogisch!
Also einen Zeiger auf ein Array kannst du bei dynamischen und statischen Arrays anlegen.

Du mußt nur beachten, das in dynamisches Array auch eigentlich nur ein Zeiger auf seine Daten ist.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Zeiger auf array

  Alt 13. Mai 2006, 10:21
Zitat:
Du mußt nur beachten, das in dynamisches Array auch eigentlich nur ein Zeiger auf seine Daten ist.
Ein "normaler" array m.W. auch
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.993 Beiträge
 
Delphi 12 Athens
 
#8

Re: Zeiger auf array

  Alt 13. Mai 2006, 11:28
Zitat von mkinzler:
Ein "normaler" array m.W. auch
Wenn "normal" bei dir statisch ( also Array[x..y] ) bedeutet ... NEIN.

Ein Array[0..3] of Byte ist zozusagen ein Record mit 4 Bytes drin,

wärend ein Array of Byte ein Pointer auf eine Array-Struktur ist, welche in sich wiederum ein Record mit Integern für ElementCount (Length) und Referenzzähler, mit einem dahinterliegendem Record der nötigen Bytes.

Delphi-Quellcode:
Var D: Array of Word
  S: Array[0..9] of Word;

SizeOf(D) = 4 (der Pointer ist ja ein Integer, also 4 Byte)
SizeOf(S) = 20 (10 * Word, also 20 Byte)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Zeiger auf array

  Alt 13. Mai 2006, 14:57
Zitat von himitsu:
Zitat von Martin K:
Aber warum geht das mit dem Zeiger auf ein Array nur bei dynamischen und nicht bei statischen?
...das ist doch unlogisch!
Also einen Zeiger auf ein Array kannst du bei dynamischen und statischen Arrays anlegen.

Du mußt nur beachten, das in dynamisches Array auch eigentlich nur ein Zeiger auf seine Daten ist.
Ja und wie kann ich das realisieren:
Ein Zeiger auf ein statisches Array ?


//Edit:
für etwas Quellcode wäre ich dankbar...
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#10

Re: Zeiger auf array

  Alt 13. Mai 2006, 15:21
Zitat von Martin K:
Ja und wie kann ich das realisieren:
Ein Zeiger auf ein statisches Array ?
Hast du in deinem ersten Post doch schon vorgemacht^^
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:09 Uhr.
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