c# 포인터 예제

보시다시피 str은 GC가 실행된 후 힙의 다른 주소를 가리켰습니다. 포인터가 str의 힙 메모리를 가리키면 이 테스트가 실패하지만 그렇지 않았습니다. 설명을 보려면 계속 읽으라. 고정 된 문에 선언 된 포인터는 배열이 고정되지 않는 한 pMyArray를 사용할 수 없도록 종료될 때 범위를 벗어납니다. 그리고 그것은 당신이 C #에서 포인터를 만드는 방법입니다! 나는 당신이 독서를 즐겼기를 바랍니다. 포인터가 안전하지 않은 이유에 대해 논의하기 전에 몇 가지 일반적인 용어를 알고 있어야 합니다. CLR, 관리 코드 및 관리되지 않는 코드와 같은 용어입니다. 하지만 “sizeof는 관리되는 형식에서는 작동하지 않습니다!” 라고 생각할 수 있습니다. 그러나 고맙게도 CompilerServices.Unsafe는 SizeOf 메서드를 제공합니다.

그럼에도 불구하고 관리되는 형식의 크기는 포인터 의 크기, 4 (32 비트) 또는 8 (64 비트) 바이트이므로 원하지 않는 경우 실제로 SizeOf 를 사용할 필요가 없습니다. 다음 표에는 안전하지 않은 컨텍스트에서 포인터에서 작동할 수 있는 연산자 및 문이 나열됩니다. 안전하지 않은 코드는 실제로 포인터를 포함하는 코드 블록이므로 C # 포인터에서는 안전하지 않습니다. 값 형식으로 작업할 뿐만 아니라 스택을 사용하여 고유한 기본 데이터 형식을 만들 수 있습니다. 문 stackalloc type[n] 명시된 데이터 형식의 n 복사본을 저장 하기에 충분 한 스택을 할당 하 고 할당의 시작에 대 한 포인터를 반환 합니다. 변수가 범위에 있는 동안 스택이 이동되지 않거나 가비지가 수집되지 않기 때문에 저장소를 수정할 필요가 없습니다. 또한 변수가 범위를 벗어날 때 스택이 자동으로 정리되기 때문에 메모리를 할당 할당 하는 것을 기억할 필요가 없습니다. 예를 들어 ToString() 메서드를 사용하여 포인터 변수에서 참조하는 위치의 데이터에 저장된 데이터를 검색할 수 있습니다. 다음 예제에서는 안전하지 않은 수정자로 표시될 때 코드 블록 함수에서 포인터 변수를 사용할 수 있습니다.

안전하지 않은 코드 또는 관리되지 않는 코드는 포인터 변수를 사용하는 코드 블록입니다. 간접 연산자는 포인터가 가리키는 주소에 저장된 값을 반환합니다. 예: 마지막으로 우리는 “참조”의 형태로 주소 아이디어의 추상화의 가장 높은 지점에 도달합니다. 참조는 데이터 항목 이나 개체에 대 한 참조입니다. 포인터처럼 들리면 이것이 사실이지만 핵심 아이디어는 참조를 직접 조작 할 수 없다는 것입니다. 즉, 포인터 산술은 확실히 있지만 참조 산술은 있을 수 없습니다. 참조로 수행할 수 있는 방법은 다른 사용자에게 전달하거나 반문하고 참조하는 데이터에 액세스하는 것입니다.