산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> C 언어

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 언어

  1. 저항기 색상 코드
  2. 색상 코드 배선
  3. 예제가 있는 C++ 포인터
  4. C의 포인터:C 프로그래밍의 포인터란 무엇입니까? 유형
  5. C - 포인터
  6. 데이터 매트릭스 코드와 QR 코드
  7. Haas Mill M 코드
  8. Mach3 M 코드
  9. M 코드 – CNC 프로그래밍 퀴즈
  10. G 코드 – CNC 프로그래밍 퀴즈