최고의 C #을 안전하지 않은 코드 튜토리얼 2024년, 이 튜토리얼에서는 포인터 변수,포인터를 사용하여 데이터 값을 가져,파라미터 방식으로 포인터를 전달,배열 요소에 액세스 할 수 포인터를 사용하여,안전하지 않은 코드를 컴파일,를 배울 수 있습니다.
불안전 개질제 태그를 사용하여 코드의 블록은, C 번호는 함수 포인터 변수의 사용을 허용하는 경우.안전하지 않은 코드 또는 비 관리 코드는 코드 블록포인터 변수의사용이다.
포인터는 다른 변수의 메모리 위치, 즉, 직접 어드레스의 어드레스의 변수 값이다.다른 변수 나 상수처럼, 당신은 다른 변수에 저장 주소 포인터를 선언하기 전에 포인터를 사용해야합니다.
포인터 변수 선언의 일반적인 형태는 다음과 같다 :
형 * var에 이름;
다음은 유효한 포인터의 선언입니다 :
INT * IP / * 포인트 정수로 * / 두 번 * DP, 배정 밀도 번호 / * 포인터 * / * FP 플로트; / * 포인터를 플로트 *에 / 숯불에 문자 * 채널 / * 포인터 * /
다음 예는안전하지 않은 수정을 사용하여 C #을 사용하는 방법을 보여줍니다 때 포인터 :
시스템을 이용하여; 네임 스페이스 UnsafeCodeApplication { 클래스 프로그램 { 정적 안전하지 않은 무효 메인 (문자열 []에 args) { INT var에 = 20; INT * P = VAR; Console.WriteLine ( "데이터는 다음과 같습니다 {0}", VAR); Console.WriteLine (이하 "주소는 다음과 같습니다 {0}", (int)를 P); Console.ReadKey (); } } }
상기 코드는 컴파일되고 실행될 때, 다음과 같은 결과를
데이터는 다음과 같습니다 (20) 주소 : 99215364
사용자는 안전하지 않은 코드, 안전하지 않은 코드의 방법을 선언 할 필요성의 일부로서 전체 방법을 선언 할 수있다. 다음의 예는이 점을 보여줍니다.
사용자는, 검색 포인터 변수에 저장된 기준 위치 데이터toString () 메서드를 사용할 수있다.다음의 예는이 점을 보여
시스템을 이용하여; 네임 스페이스 UnsafeCodeApplication { 클래스 프로그램 { 공공 정적 무효 메인 () { 위험한 { INT var에 = 20; INT * P = VAR; Console.WriteLine ( "데이터는 다음과 같습니다 {0}", VAR); Console.WriteLine는 ( "데이터는 다음과 같습니다 {0}", P-> ToString ()); Console.WriteLine (이하 "주소는 다음과 같습니다 {0}", (int)를 P); } Console.ReadKey (); } } }
상기 코드는 컴파일되고 실행될 때, 다음과 같은 결과를
데이터는 다음과 같습니다 (20) 데이터는 다음과 같습니다 (20) 주소 : 77128984
당신은 접근 방법에 대한 매개 변수로 포인터 변수를 전달할 수 있습니다. 다음의 예는이 점을 보여
시스템을 이용하여; 네임 스페이스 UnsafeCodeApplication { 클래스 TestPointer { 공공 안전하지 않은 무효 스왑 (INT의 * p를, INT의 * Q) { INT 온도 = * 피; * P = Q *; * Q = 임시; } 공공 안전하지 않은 정적 무효 메인 () { TestPointer P는 = 새로운 TestPointer (); INT VAR1 = 10; INT VAR2 = 20; INT * X = VAR1; INT * Y = VAR2; Console.WriteLine ( "스왑 전 : VAR1 : {0}, VAR2 : {1}", VAR1, VAR2); p.swap (X, Y); Console.WriteLine ( "스왑 후 : VAR1 : {0}, VAR2 : {1}", VAR1, VAR2); Console.ReadKey (); } } }
상기 코드는 컴파일되고 실행될 때, 다음과 같은 결과를
VAR1 : 스왑 전에 10 VAR2 : 20 VAR1 : 스왑 후 20 VAR2 : 10
C #으로 배열 이름과 같은 데이터 타입으로 배열 된 데이터에 대한 포인터가 다른 변수 유형에 대한 포인터이다. 예를 들어, INT의 * p와 int로는 [] p는 다른 유형입니다. 이 메모리에 고정되어 있지 않기 때문에 당신은 포인터 변수 p를 증가 할 수 있지만, 배열의 주소는 메모리에 고정되어 있으므로 배열 페이지를 추가 할 수 없습니다.
그래서, 키워드고정형 포인터를 사용하는 우리가 일반적으로 C 또는 C ++에서와 같이, 배열 데이터에 액세스하는 포인터 변수를 사용해야하는 경우.
다음의 예는이 점을 보여
시스템을 이용하여; 네임 스페이스 UnsafeCodeApplication { 클래스 TestPointer { 공공 안전하지 않은 정적 무효 메인 () { INT []리스트 = {10, 100, 200}; 고정 (INT * PTR = 목록) / * 디스플레이 포인터 배열의 주소 * / 위해 (내가 3 <나는 = 0 int로 내가 ++) { Console.WriteLine ( "목록의 주소 [{0}] = {1}", 난, (int)를 PTR (+ I)); Console.WriteLine ( "목록의 값 [{0}] = {1}", 난, * (PTR + I)); } Console.ReadKey (); } } }
상기 코드는 컴파일되고 실행될 때, 다음과 같은 결과를
목록의 주소 [0] = 31627168 목록의 값은 [0] (10) = 목록의 주소 [1] = 31627172 목록의 값 [1] = 100 목록의 주소 [2] = 31627176 목록의 값 [2] = 200
안전하지 않은 코드를 컴파일하려면, 당신은/ 안전하지 않은 명령 줄을 지정하는 명령 줄 컴파일러로 전환해야합니다.
예를 들어,라는 prog1.cs가 안전하지 않은 코드를 포함 명령 줄에서 명령을 입력하는 프로그램을 컴파일합니다 :
CSC / 안전하지 않은 prog1.cs
당신은 비주얼 스튜디오 IDE를 사용하는 경우, 당신은 프로젝트 속성에서 안전하지 않은 코드를 사용하도록 설정해야합니다.
다음과 같이 진행하십시오 :