Suche…


Syntax

  • & <variable> - Zugriff per Referenz (= ruft den Zeiger auf die Daten der Variablen ab)
  • * <variable> - Deference-Operator (= ruft das Datenobjekt von einem Zeiger ab)
  • <type> * - Datentyp, der auf <type> zeigt (z. B. `int *)

Zeiger

D ist eine Systemprogrammiersprache, mit der Sie den Speicher manuell verwalten und verwirren können. Trotzdem verwendet D standardmäßig einen Speicherbereiniger, um nicht verwendeten Speicherplatz freizugeben.

D liefert Zeigertypen T * wie in C:

void main()
{
    int a;
    int* b = &a; // b contains address of a
    auto c = &a; // c is int* and contains address of a

    import std.stdio : writeln;
    writeln("a ", a);
    writeln("b ", b);
    writeln("c ", c);
}

Zuteilung auf dem Haufen

Ein neuer Speicherblock auf dem Heap wird mit dem new Ausdruck zugewiesen, der einen Zeiger auf den verwalteten Speicher zurückgibt:

void main()
{
    int* a = new int;
    *a = 42; // dereferencing
    import std.stdio : writeln;
    writeln("a: ", *a);
}

@safe D

Sobald der von a referenzierte Speicher nicht mehr durch eine Variable im Programm referenziert wird, gibt der Garbage Collector seinen Speicher frei.

D erlaubt auch die Zeigerarithmetik, außer im Code, der als @safe markiert @safe .

void safeFun() @safe
{
    writeln("Hello World");
    // allocating memory with the GC is safe too
    int* p = new int;
}

void unsafeFun()
{
    int* p = new int;
    int* fiddling = p + 5;
}

void main()
{
    safeFun();
    unsafeFun();
}

Weitere Informationen zu SafeD finden Sie im Artikel des D-Designteams.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow