AGB  ·  Datenschutz  ·  Impressum  







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

Untere Grenze statisches Array

Ein Thema von BrunoT · begonnen am 20. Sep 2005 · letzter Beitrag vom 20. Sep 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von BrunoT
BrunoT

Registriert seit: 23. Jan 2003
Ort: Sandbeiendorf
360 Beiträge
 
Delphi 8 Professional
 
#1

Untere Grenze statisches Array

  Alt 20. Sep 2005, 13:21
Hi,

ich habe da etwas merkwürdiges und hätte das mal erklärt:

Delphi-Quellcode:
const
  max = 40;

var;
  m: array[1..max, 1..2] of double;
so habe ich ein Statisches Array definiert. Kann aber auf 41 Elemente zugreifen:

Delphi-Quellcode:
  for i := 0 to max do
  begin
    m[i, 1] := i;
    m[i, 2] := 0;
  end;
Aufgefallen ist mir dass, weil ich das Array im Debug- Modus angeschaut habe und das erste Elememt nicht Null war.

????Warum????

mfg

BrunoT

P.S. Wenn ich das Array aber benutze, kommt es zu einem Fehler. -> also doch nur 40 Elemente!!!
Holger

EDV- Ende der Vernunft
Meine Calcedit-Kompo
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Untere Grenze statisches Array

  Alt 20. Sep 2005, 13:27
Ein Array geht von 0 - MaxAnzahl

sprich
Delphi-Quellcode:
for i := Low(AArray) to High(AArray)
...
liefert bei dir 41 Elemente, da deine Schleife bei 0 anfängt
und bei 40 aufhört -> 40 Elemente + 0´tes Element = 41
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Untere Grenze statisches Array

  Alt 20. Sep 2005, 13:29
Was sollte dich daranhindern daraufzuzugreifen? Ich kann auch in eine Steckdose greifen, das sich nacher tot bin nun ja.

Aber aktiviere mal das RangeChecking, dann solltest du zumindest eine Warnung bekommen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von BlackJack
BlackJack

Registriert seit: 2. Jul 2005
Ort: Coesfeld
246 Beiträge
 
Delphi 2005 Personal
 
#4

Re: Untere Grenze statisches Array

  Alt 20. Sep 2005, 13:31
@Tyrael: für Low() und High() bitte runde Klammern benutzen!


@Bruno: wenn dein array bei Index 1 losgeht, du aber auf Index null zugreifst, dann geht das bei ausgeschalteter bereichsüberprüfung deshalb, weil du dann auf die variable, die vor diesem array steht, zugreifst. wenn da eine "unwichtige" variable steht, kann das unter umständen gut gehen, aber im allgemeinen ist natürlich strengstens davon abzuraten, ein array mit zu grossen/kleinen Indizes zu adressieren. (von daher fürs debugginh vielleicht auch mal in den Compileroptionen die Bereichsüberprüfung aktivieren)
See my shadow changing, stretching up and over me.
Soften this old armor. Hoping I can clear the way
By stepping through my shadow, coming out the other side.
Step into the shadow. Forty six and two are just ahead of me.
  Mit Zitat antworten Zitat
Benutzerbild von leddl
leddl

Registriert seit: 13. Okt 2003
Ort: Künzelsau
1.613 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Untere Grenze statisches Array

  Alt 20. Sep 2005, 13:32
Zitat von Tyrael Y.:
Ein Array geht von 0 - MaxAnzahl

sprich
Delphi-Quellcode:
for i := Low(AArray) to High(AArray)
...
liefert bei dir 41 Elemente, da deine Schleife bei 0 anfängt
und bei 40 aufhört -> 40 Elemente + 0´tes Element = 41
Naja, ein dynamisches Array ist sehr wohl 0-basiert, da hast du recht. Bei einem statischen Array kannst du aber den Startwert angeben. Welchen Sinn sollte denn sonst Low() überhaupt haben, wenn jedes Array sowieso bei 0 beginnt?

Aber so wies aussieht hat sichs ja geklärt. Ich hatte das jetzt so verstanden, daß das 0-te Element tatsächlich verfügbar war...
Axel Sefranek
A programmer started to cuss, cause getting to sleep was a fuss.
As he lay there in bed, looping round in his head
was: while(!asleep()) ++sheep;
  Mit Zitat antworten Zitat
profmaster

Registriert seit: 9. Feb 2005
Ort: Frakfurt/Oder
21 Beiträge
 
Delphi 7 Professional
 
#6

Re: Untere Grenze statisches Array

  Alt 20. Sep 2005, 13:40
Hallo BrunoT!

Ich vermute, dass intern das Array wie ein dynamisches Array aufgebaut wird, aber eben vom Compiler mit den Vorgaben in der Typdefinition. Und dynamische Arrays beginnen immer mit Index Null. Hab ich aber noch nicht getestet. Ein mögliches Testprogramm wäre folgendes:

Delphi-Quellcode:
unit Test;

interface

type
  TArray = array[5..8] of integer;

var
  ZArray: TArray;

procedure Zuweisen(values: array of integer);

implementation

procedure Zuweisen(values: array of integer);
var i,j: integer;
begin
  for i:=0 to 8 do begin ZArray[i] := values[j]; inc(j); end;
end;

end.

program Zuw;

begin
  Zuweisen([1,2,3,4,5,6,7,8]);
end.
Kann aber nicht gesund sein, wenn das noch funzt. Du solltest folgendes machen:

Delphi-Quellcode:
procedure Zuweisen(values: array of Integer;
va i,j: Integer;
begin
   try
     for i:=0 to 8 do begin ZArray[i] := values[j]; inc(j); end;
   except
     on ERangeError do ...
   end;
end;
Gegebenenfalls solltest Du Bereichüberwachung einschalten oder im Programmtext dafür sorgen, dass die Arraygrenzen nicht überschritten werden können.

Viel Erfolg wünscht Dir

profmaster
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#7

Re: Untere Grenze statisches Array

  Alt 20. Sep 2005, 13:48
Zitat von profmaster:
Ich vermute, dass intern das Array wie ein dynamisches Array aufgebaut wird
Statische Arrays gab es in Delphi aber schon bevor sie dynamische Arrays eingeführt habe.

Zitat:
for i:=0 to 8 do begin ZArray[i] := values[j]; inc(j); end;
Das geht aber gehörig schief. Zum einen ist j nur mit einer Wahrscheinlichkeit von 4Mrd zu 1 irgendwann mal 0 und dann greifst du auf ZArray außerhalb des Index-Bereichs zu.
  Mit Zitat antworten Zitat
Benutzerbild von leddl
leddl

Registriert seit: 13. Okt 2003
Ort: Künzelsau
1.613 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Untere Grenze statisches Array

  Alt 20. Sep 2005, 13:49
Aber dadurch lernt man mal wieder, wie praktisch es sein kann, wenn man Arrays immer gleich von low() bis high() durchgeht, ohne Indizes direkt zu setzen
Axel Sefranek
A programmer started to cuss, cause getting to sleep was a fuss.
As he lay there in bed, looping round in his head
was: while(!asleep()) ++sheep;
  Mit Zitat antworten Zitat
Benutzerbild von BrunoT
BrunoT

Registriert seit: 23. Jan 2003
Ort: Sandbeiendorf
360 Beiträge
 
Delphi 8 Professional
 
#9

Re: Untere Grenze statisches Array

  Alt 20. Sep 2005, 15:00
Hi an Alle,

danke für die erschöpfenden Antworten.

Ich werde es mir angewöhnen meine Arrays entweder als dyn. Arrays zu definieren, oder statische Arrays mit Null zu beginnen, (low und High wären ja auch möglich).

Na ja man lernt eben nicht aus.

mfg


BrunoT
Holger

EDV- Ende der Vernunft
Meine Calcedit-Kompo
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Untere Grenze statisches Array

  Alt 20. Sep 2005, 15:26
Zitat von BrunoT:
Hi an Alle,

danke für die erschöpfenden Antworten.

Ich werde es mir angewöhnen meine Arrays entweder als dyn. Arrays zu definieren, oder statische Arrays mit Null zu beginnen......
Hallo Bruno,

1.
...ich rate dir möglichst immer statische Arrays zu benutzen, da dyn. Arrays ziemlich an die Performance gehen...guck das jeweilige Projekt genau an und entscheide dann, ob ein statisches Array recihen würde, wenn ja mach es in den meisten Fällen lieber statisch....

2.
...wenn du ein statisches Array erzeugts dann mach das ruhig wie du meinst, du MUSST nicht bei 0 anfangen zu indexieren, nimm was besser passt, das ist schon ok, aber achte darauf, daß wenn du das Array durchgehst du statt
einem Konstrukt wie

Delphi-Quellcode:
for i := Anfangwert to Maxwert do
...
lieber

Delphi-Quellcode:
for i := Low(MeinArray) to High(MeinArray) do
...
schreibst, das ist nicht so fehleranfällig...

..nur zwei gutgemeinte Ratschläge


Gruß

Tyrael
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  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 17:57 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