Wie man das ganze Array in C # unter Verwendung des Schlüsselwortes festlegt

8

Zeichnet die Zeile fixed (int* pArray = &array[0]) aus dem folgenden Beispiel das gesamte Array oder nur array[0] ?

%Vor%     
Jenix 03.09.2015, 20:12
quelle

1 Antwort

6

Die folgende Aussage:

%Vor%

wird das vollständige -Array beheben. Der Beweis findet sich in der C # -Sprachspezifikation (Abschnitt 18.6 Der feste Aussage , Hervorhebung von mir):

  

Ein Fixed-Pointer-Initialisierer kann einer der folgenden sein:

     

...

     
  • Ein Ausdruck eines Array-Typs mit Elementen eines nicht verwalteten T-Typs, vorausgesetzt, der Typ T * ist implizit in den in der festen Anweisung angegebenen Zeigertyp konvertierbar. In diesem Fall berechnet der Initialisierer die Adresse des ersten Elements im Array und das gesamte Array bleibt garantiert für die Dauer der festen Anweisung an einer festen Adresse. ...
  •   

Die folgende Aussage:

%Vor%

behebt die Adresse des ersten Array-Elements . Wieder ein Zitat aus der Spezifikation (aus einem Beispiel in diesem Kapitel):

%Vor%      

... und die dritte Anweisung korrigiert und erhält die Adresse von ein Array-Element .

Seitennotiz: Ich würde annehmen, dass jede vernünftige Implementierung, die das erste -Element repariert, einfach das ganze Array repariert, aber die Spezifikation scheint das nicht zu garantieren.

Wenn Sie ein wenig tiefer in den Beispielcode in der Spezifikation eintauchen, sehen Sie Folgendes:

%Vor%      

Die vierte feste Anweisung im obigen Beispiel erzeugt ein ähnliches Ergebnis wie die dritte.

Leider geben sie nicht an, was genau sie mit " ähnliches Ergebnis " meinen, aber es ist erwähnenswert, dass sie nicht " dasselbe Ergebnis " sagten.

    
Heinzi 03.09.2015, 20:40
quelle

Tags und Links