C 언어
C#은 unsafe로 표시된 경우 코드 블록의 함수에서 포인터 변수를 사용할 수 있습니다. 수정자. 안전하지 않은 코드 또는 비관리 코드가 포인터를 사용하는 코드 블록입니다. 변수.
포인터 값이 다른 변수의 주소, 즉 메모리 위치의 직접 주소인 변수입니다. 모든 변수나 상수와 마찬가지로 포인터를 선언해야 변수 주소를 저장할 수 있습니다.
포인터 선언의 일반적인 형식은 -
입니다.type *var-name;
다음은 유효한 포인터 선언입니다 -
int *ip; /* pointer to an integer */ double *dp; /* pointer to a double */ float *fp; /* pointer to a float */ char *ch /* pointer to a character */
다음 예제에서는 unsafe 한정자를 사용하여 C#에서 포인터를 사용하는 방법을 보여줍니다. -
using System; namespace UnsafeCodeApplication { class Program { static unsafe void Main(string[] args) { int var = 20; int* p = &var; Console.WriteLine("Data is: {0} ", var); Console.WriteLine("Address is: {0}", (int)p); Console.ReadKey(); } } }
위의 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다. -
Data is: 20 Address is: 99215364
전체 메서드를 안전하지 않은 것으로 선언하는 대신 코드의 일부를 안전하지 않은 것으로 선언할 수도 있습니다. 다음 섹션의 예가 이를 보여줍니다.
ToString()을 사용하여 포인터 변수가 참조하는 위치에 저장된 데이터를 검색할 수 있습니다. 방법. 다음 예는 이것을 보여줍니다 -
using System; namespace UnsafeCodeApplication { class Program { public static void Main() { unsafe { int var = 20; int* p = &var; Console.WriteLine("Data is: {0} " , var); Console.WriteLine("Data is: {0} " , p->ToString()); Console.WriteLine("Address is: {0} " , (int)p); } Console.ReadKey(); } } }
위의 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다. -
Data is: 20 Data is: 20 Address is: 77128984
포인터 변수를 매개변수로 메소드에 전달할 수 있습니다. 다음 예는 이것을 보여줍니다 -
using System; namespace UnsafeCodeApplication { class TestPointer { public unsafe void swap(int* p, int *q) { int temp = *p; *p = *q; *q = temp; } public unsafe static void Main() { TestPointer p = new TestPointer(); int var1 = 10; int var2 = 20; int* x = &var1; int* y = &var2; Console.WriteLine("Before Swap: var1:{0}, var2: {1}", var1, var2); p.swap(x, y); Console.WriteLine("After Swap: var1:{0}, var2: {1}", var1, var2); Console.ReadKey(); } } }
위의 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다. -
Before Swap: var1: 10, var2: 20 After Swap: var1: 20, var2: 10
C#에서 배열 이름과 배열 데이터와 동일한 데이터 형식에 대한 포인터는 동일한 변수 형식이 아닙니다. 예를 들어, int *p와 int[] p는 같은 유형이 아닙니다. 포인터 변수 p는 메모리에 고정되어 있지 않고 배열 주소가 메모리에 고정되어 있기 때문에 증가할 수 있으며, 증가할 수 없습니다.
따라서 C 또는 C++에서 전통적으로 수행하는 것처럼 포인터 변수를 사용하여 배열 데이터에 액세스해야 하는 경우(C 포인터를 확인하십시오) 고정을 사용하여 포인터를 수정해야 합니다. 키워드.
다음 예는 이것을 보여줍니다 -
using System; namespace UnsafeCodeApplication { class TestPointer { public unsafe static void Main() { int[] list = {10, 100, 200}; fixed(int *ptr = list) /* let us have array address in pointer */ for ( int i = 0; i < 3; i++) { Console.WriteLine("Address of list[{0}]={1}",i,(int)(ptr + i)); Console.WriteLine("Value of list[{0}]={1}", i, *(ptr + i)); } Console.ReadKey(); } } }
위의 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다. -
Address of list[0] = 31627168 Value of list[0] = 10 Address of list[1] = 31627172 Value of list[1] = 100 Address of list[2] = 31627176 Value of list[2] = 200
안전하지 않은 코드를 컴파일하려면 /unsafe를 지정해야 합니다. 명령줄 컴파일러가 있는 명령줄 스위치.
예를 들어, 안전하지 않은 코드가 포함된 prog1.cs라는 프로그램을 컴파일하려면 명령줄에서 −
명령을 입력합니다.csc /unsafe prog1.cs
Visual Studio IDE를 사용하는 경우 프로젝트 속성에서 안전하지 않은 코드 사용을 활성화해야 합니다.
이렇게 하려면 -
프로젝트 속성 열기 솔루션 탐색기에서 속성 노드를 두 번 클릭합니다.
빌드를 클릭하십시오. 탭.
"안전하지 않은 코드 허용 옵션을 선택하십시오. ".
C 언어
GTCNC-150iT-II G 코드 M 코드 CNC 선반용 GREAT-150iT-II 또는 GTCNC-150iT-II G 코드 M 코드 G 코드 G 코드 설명 G00 신속한 포지셔닝 G01 선형 보간 G02 헬리컬 보간 CW G03 헬리컬 보간 CCW G33 트레딩 G04 드웰 G17 X-Y 평면 G18 Z-X 평면 G19 Y-Z 평면 G20 인치 형식 입력 G21 미터 형식 입력 G28/G281/G282/G283 첫 번째 기준점으로 돌아가기 G30/G301/G302/G303 2번째, 3번째, 4번째 기준
GTCNC-60TT G 코드 M 코드 CNC 선반용 GREAT-60TT 또는 GTCNC-60TT G 코드 M 코드. G 코드 G 코드 설명 G00 빠른 동작 G01 선형 보간 G02 원형 보간 CW G03 원호 보간 CCW G33 실 자르기 G04 드웰 G20 인치 형식 입력 G21 미터 형식 입력 G28 X, Z축 최초 기준점 복귀 G281 X축 첫 번째 기준점으로 복귀 G283 Z축 첫 번째 기준점으로 복귀 G26 ZX축 프로그램 원점 복귀 G261 X축 프로그램 원점 복귀 G263 Z축 프로그램