1. Trang chủ
  2. » Thể loại khác

Unsafe code trong C | 85 bài học lập trình C hay nhất PDF csharp unsafe codes

6 118 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 6
Dung lượng 402,04 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Unsafe code trong C# C# cho phép sử dụng các biến con trỏ trong một hàm của khối code khi nó được đánh dấu bởi unsafe modifier.. Khái niệm unsafe code hoặc unmanaged code trong C# là một

Trang 1

Unsafe code trong C#

C# cho phép sử dụng các biến con trỏ trong một hàm của khối code khi nó được đánh dấu

bởi unsafe modifier Khái niệm unsafe code hoặc unmanaged code trong C# là một khối code mà

sử dụng một biến con trỏ

Ghi chú: Để thực thi các chương trình được đề cập trong chương này tại,codingground, bạn nên

thiết lập tùy chọn biên dịch trong Project >> Compile Options >> Compilation Command thành

mcs *.cs -out:main.exe -unsafe"

Con trỏ (Pointer) trong C#

Một con trỏ là một biến mà có giá trị là địa chỉ của biến khác, ví dụ: địa chỉ trực tiếp của vị trí bộ

nhớ Tương tự như bất kỳ biến hoặc hằng khác trong C#, bạn phải khai báo một con trỏ trước khi bạn có thể sử dụng nó để lưu giữ bất kỳ địa chỉ biến nào

Form chung của một khai báo con trỏ trong C# là:

type * var - name ;

Dưới đây là các khai báo con trỏ hợp lệ trong C#:

int * ip ; /* pointer to an integer */

double dp ; /* pointer to a double */

float * fp ; /* pointer to a float */

char * ch /* pointer to a character */

Ví dụ sau minh họa sự sử dụng của con trỏ, sử dụng unsafe modifier trong C#:

using System ;

namespace UnsafeCodeApplication

{

class Program

{

static unsafe void Main ( string [] args )

{

int var 20 ;

Trang 2

int * p = & var ;

Console WriteLine ("Data is: {0} ", var );

Console WriteLine ("Address is: {0}", ( int ) );

Console ReadKey ();

}

}

}

Khi code trên được biên dịch và thực thi, nó sẽ cho kết quả:

Data is: 20

Address is: 99215364

Thay cho việc khai báo toàn bộ phương thức ở dạng unsafe, bạn cũng có thể khai báo một phần code dạng unsafe

Thu hồi giá trị dữ liệu bởi sử dụng con trỏ trong C#

Bạn có thể thu hồi dữ liệu đã được lưu giữ tại vị trí được tham chiếu bởi biến con trỏ, sử dụng

phương thức ToString() trong C# Đây là ví dụ minh họa:

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

}

Trang 3

Console ReadKey ();

}

}

}

Khi code trên được biên dịch và thực thi, nó sẽ cho kết quả:

Data is: 20

Data is: 20

Address is: 77128984

Truyền Con trỏ như là các Tham số tới phương thức trong C#

Bạn có thể truyền một biến con trỏ tới một phương thức dưới dạng các tham số Đây là ví dụ minh họa:

using System ;

namespace UnsafeCodeApplication

{

class TestPointer

{

public unsafe void swap ( int * p , int q

{

int temp = * ;

* p = * ;

* q = temp ;

}

public unsafe static void Main ()

{

TestPointer p = new TestPointer ();

int var1 = 10 ;

int var2 = 20 ;

int * x = & var1 ;

Trang 4

int * y = & var2 ;

Console WriteLine ("Before Swap: var1:{0}, var2: {1}", var1 , var2 );

p swap ( , y );

Console WriteLine ("After Swap: var1:{0}, var2: {1}", var1 , var2 );

Console ReadKey ();

}

}

}

Khi code trên được biên dịch và thực thi, nó sẽ cho kết quả:

Before Swap: var1: 10, var2: 20

After Swap: var1: 20, var2: 10

Truy cập các phần tử mảng bởi sử dụng một con trỏ trong C#

Trong C#, một tên mảng và một con trỏ tới cùng kiểu dữ liệu ở dạng dữ liệu mảng, là không cùng kiểu biến Ví dụ, int *p và int[] p, là không cùng kiểu Bạn có thể lượng gia biến con trỏ p bởi vì nó không là cố định trong bộ nhớ, nhưng một địa chỉ mảng là cố định trong bộ nhớ, và bạn không thể lượng gia nó

Vì thế, nếu bạn cần truy cập một dữ liệu mảng bởi sử dụng một biến con trỏ, như khi chúng ta đã làm trong C hoặc C++ (bạn có thể kiểm tra: Con trỏ trong C), bạn cần cố định con trỏ đó bởi sử

dụng từ khóa fixed trong C#

Sau đây là ví dụ minh họa:

using System ;

namespace UnsafeCodeApplication

{

class TestPointer

{

public unsafe static void Main ()

{

Trang 5

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}", ,( int )( ptr + i ));

Console WriteLine ("Value of list[{0}]={1}", i , *( ptr + i ));

}

Console ReadKey ();

}

}

}

Khi code trên được biên dịch và thực thi, nó sẽ cho kết quả:

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

Biên dịch Unsafe Code trong C#

Để biên dịch Unsafe Code, bạn phải xác định /unsafe command-line

Ví dụ, để biên dịch chương trình có tên prog1.cs chứa unsafe code, từ command-line, bạn cung cấp lệnh sau trong C#:

csc / unsafe prog1 cs

Nếu bạn đang sử dụng Visual Studio IDE, bạn cần kích hoạt sự sử dụng của unsafe code trong project properties

Để làm điều này:

Trang 6

Mở project properties bằng việc nhấn đúp chuột vào properties node trong Solution

Explorer

Nhấn vào Build tab

Chọn tùy chọn "Allow unsafe code"

Như trong ình ảnh sau:

Ngày đăng: 02/12/2017, 19:59

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN