Szukaj…


Składnia

  • & <variable> - dostęp przez odniesienie (= pobiera wskaźnik do danych zmiennej)
  • * <variable> - operator deference (= pobiera obiekt danych ze wskaźnika)
  • <type> * - typ danych wskazujący na <type> (np. `int *)

Wskaźniki

D to systemowy język programowania, który pozwala ręcznie zarządzać pamięcią i zepsuć jej pamięć. Niemniej jednak D używa domyślnie modułu wyrzucania elementów bezużytecznych w celu zwolnienia nieużywanej pamięci.

D zapewnia typy wskaźników T * jak w 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);
}

Przydział na stosie

Nowy blok pamięci na stercie jest alokowany przy użyciu new wyrażenia, które zwraca wskaźnik do pamięci zarządzanej:

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

@safe D.

Gdy tylko pamięć, do której odwołuje się nie jest już żadna zmienna w programie, śmieciarz zwolni swoją pamięć.

D pozwala również na arytmetykę wskaźnika, z wyjątkiem kodu oznaczonego jako @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();
}

Więcej informacji o SafeD znajduje się w artykule zespołu projektowego D.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow