수색…


통사론

  • & <variable> - 참조에 의한 액세스 (= 변수의 데이터에 대한 포인터를 얻음)
  • * <variable> - 추론 연산자 (= 포인터에서 데이터 객체 가져 오기)
  • <type> * - <type>을 가리키는 데이터 유형 (예 :`int *)

포인터

D는 시스템 프로그래밍 언어이므로 수동으로 메모리를 관리하고 엉망으로 만들 수 있습니다. 그럼에도 불구하고 D는 사용하지 않은 메모리를 해제하기 위해 기본값 당 가비지 수집기를 사용합니다.

D는 C에서와 같이 포인터 유형 T *를 제공합니다.

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);
}

힙에 할당

힙의 새 메모리 블록은 관리 식 메모리에 대한 포인터를 반환하는 new 식을 사용하여 할당됩니다.

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

@ 안전 D

a가 참조하는 메모리가 프로그램의 변수를 통해 더 이상 참조되지 않으면 가비지 수집기가 메모리를 해제합니다.

D는 @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();
}

SafeD에 대한 자세한 내용은 D 디자인 팀의 기사 를 참조하십시오.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow