2017-06-07 1 views
-1

Ich habe eine Zuweisung über die Implementierung der Zugriffsfunktion auf ein Array in Ada. jedoch Erklärung des Arrays für mich frustrierend war:Array-Indizes beginnen mit einem Wert ungleich 1 in Ada

A: array[1..15, 5..20] of integer; 

ich viele Materialien im Internet über mehrdimensionale Arrays in Ada jedoch gefunden, nicht von ihnen erwähnte in diesem Fall Speicherzuweisung. Ist es nur eine einfache Zuordnung von 1..15 zu 5..20? Oder, Programm überspringt tatsächlich die ersten 4 Elemente in jeder Zeile des Arrays und hält Speicher leer? Was passiert, wenn ich versuche, auf A [1, 3] zuzugreifen?

Antwort

4

The Ada 2012 specification states:

  • Die möglichen Werte für einen gegebenen Index sind alle Werte zwischen den unteren und oberen Grenzen einschließlich ist; Dieser Wertebereich wird als Indexbereich bezeichnet.
  • Die Grenzen eines Arrays sind die Grenzen seiner Indexbereiche.
  • Die Länge einer Dimension eines Arrays ist die Anzahl der Werte des Indexbereichs der Dimension (Null für einen Nullbereich).

Bezüglich Speicherrepräsentation, the section of the specification concerned with array operations states, dass die Länge eines Arrays von seinem oberen Bereich gebundenen definiert ist minus seinem unteren gebundenen plus 1 (die eine Neuformulierung des dritten Aufzählungspunkt oben ist).

Mit diesem Wissen wir Ihre Fragen beantworten können:

Ist es nur einfache Zuordnung von 1..15 auf 5..20?

Es gibt eine implizite Zuordnung von Indizes zu internen Array-Bereichsstandorten, aber Ihre Zuordnung ist nicht korrekt.

Mit array[ 1..15, 5..20]:

  • der 1. Dimension Array Bereichslänge 15 - 1 + 1 ist, so 15 Elemente lang ist.
  • Die 2. Dimension Array-Bereich Länge ist 20 - 5 + 1, also 16 Elemente lang.

Oder Programm überspringt tatsächlich ersten 4 Elemente in jeder Zeile des Arrays und hält Speicher leer?

Nein, gemäß der Spezifikation wird das System keinen Platz für Array-Elemente zuweisen, auf die der definierte Bereich nicht zugreifen kann.

Was passiert, wenn ich versuche, auf A [1, 3] zuzugreifen?

Die Spezifikation besagt eine Indexgrenze Prüfung basierend auf dem Bereich durchgeführt, wird das Array mit, da initialisiert wurde, dass 1,3 außerhalb des Bereichs liegt [1..15,5..20] dies in einer Laufzeitindex-out-of-Grenzen Fehlern führen würde.

+1

Es gibt keine 0. Dimension. Der erste,'A'Length (1) = 15', der zweite, 'A'Length (2) = 16' – egilhh

+1

@egilhh Ich habe meine Antwort korrigiert, danke für das Feedback. – Dai

Verwandte Themen