Autor |
Beitrag |
Stephan.Woebbeking
      
Beiträge: 97
|
Verfasst: Do 09.06.11 15:11
|
|
guinnes
      
Beiträge: 182
Erhaltene Danke: 14
|
Verfasst: Do 09.06.11 15:15
Die Deklaration ist zwar gleich, es ist aber nicht die selbe. Die Typprüfung von Pascal ist sehr streng, und das ist auch gut so. So ist z.B. ein Pointer auch nur ein Integer, also vom Datentyp eigentlich gleich. Trotzdem sind die beiden nicht kompatibel
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 09.06.11 15:34
Das erste ist ein offenes Array, d.h. die Werte des Parameters landen beim Aufruf im Stack.
Das zweite ist ein dynamisches Array, d.h. ein Pointer auf die Werte des Arrays. Und auch nur der Pointer wird übergeben.
Diese beide Typen sehen zwar ähnlich aus, sind aber grundverschieden aufgebaut, so dass keine gegenseitige Zuweisung möglich ist.
|
|
Stephan.Woebbeking 
      
Beiträge: 97
|
Verfasst: Do 09.06.11 16:39
Moment, da habe ich vielleicht etwas zu kurz geschrieben. Ich habe NICHT versucht diese beiden Typen zu KOMBINIEREN, sondern das zweite ist lediglich die ALTERNATIVE, mit der ich feststelle, dass es klappt. D.h. wenn ich beides - Argument und formalen Parameter - als "array of Integer" definiere will das nicht... Wird das so klarer; auch nicht mit der Information aus den Antworten?
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 09.06.11 16:43
Wie ich geschrieben habe: Im ersten Fall hast du ein offenes Array, bei dem die Daten auf dem Stack liegen. Das kannst du nicht in der Größe verändern. Die Daten liegen wie sie sind im Stack.
Im zweiten Fall hast du ein dynamisches Array, und auf diesen Pointer kannst du dann auch entsprechend zugreifen und auch die Größe verändern. Denn die Daten liegen hier nicht als Werte vor, sondern du hast eine Referenz, also einen Pointer, darauf.
|
|
Stephan.Woebbeking 
      
Beiträge: 97
|
Verfasst: Do 09.06.11 16:58
Ok, das habe ich jetzt verstanden... Abgesehen davon, dass es ziemlich widersprüchlich klingt, ein OFFENES array auf dem Stack und damit eben nicht veränderlich zu haben. Und das wird nur durch die zusätzliche Typdefinition ausgelöst, oder habe ich noch etwas anderes übersehen?
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 09.06.11 17:03
Durch die Typdefinition definierst du ein dynamisches Array. Und damit hast du nur noch einen Pointer und darfst ändern.
|
|
Stephan.Woebbeking 
      
Beiträge: 97
|
Verfasst: Di 14.06.11 09:53
|
|