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

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

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

Thông tin tài liệu

http://vietjack.com/csharp/index.jsp Copyright © vietjack.com Unsafe code C# C# cho phép sử dụng biến trỏ hàm khối code đánh dấu unsafe modifier Khái niệm unsafe code unmanaged code C# khối code mà sử dụng biến trỏ Ghi chú: Để thực thi chương trình đề cập chương tại,codingground, bạn nên thiết lập tùy chọn biên dịch Project >> Compile Options >> Compilation Command thành mcs *.cs -out:main.exe -unsafe" Con trỏ (Pointer) C# Một trỏ biến mà có giá trị địa biến khác, ví dụ: địa trực tiếp vị trí nhớ Tương tự biến khác C#, bạn phải khai báo trỏ trước bạn sử dụng để lưu giữ địa biến Form chung khai báo trỏ C# là: type *var-name; Dưới khai báo trỏ hợp lệ 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ử dụng trỏ, sử dụng unsafe modifier C#: using System; namespace UnsafeCodeApplication { class Program { static unsafe void Main(string[] args) { int var = 20; http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/csharp/index.jsp Copyright © vietjack.com int* p = &var; Console.WriteLine("Data is: {0} ", var); Console.WriteLine("Address is: {0}", (int)p); Console.ReadKey(); } } } Khi code biên dịch thực thi, cho kết quả: Data is: 20 Address is: 99215364 Thay cho việc khai báo toàn phương thức dạng unsafe, bạn khai báo phần code dạng unsafe Thu hồi giá trị liệu sử dụng trỏ C# Bạn thu hồi liệu lưu giữ vị trí tham chiếu biến trỏ, sử dụng phương thức ToString() C# Đây 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)p); } http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/csharp/index.jsp Copyright © vietjack.com Console.ReadKey(); } } } Khi code biên dịch thực thi, cho kết quả: Data is: 20 Data is: 20 Address is: 77128984 Truyền Con trỏ Tham số tới phương thức C# Bạn truyền biến trỏ tới phương thức dạng tham số Đây ví dụ minh họa: 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; http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/csharp/index.jsp Copyright © vietjack.com 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(); } } } Khi code biên dịch thực thi, cho kết quả: Before Swap: var1: 10, var2: 20 After Swap: var1: 20, var2: 10 Truy cập phần tử mảng sử dụng trỏ C# Trong C#, tên mảng trỏ tới kiểu liệu dạng liệu mảng, khơng kiểu biến Ví dụ, int *p int[] p, khơng kiểu Bạn lượng gia biến trỏ p khơng cố định nhớ, địa mảng cố định nhớ, bạn lượng gia Vì thế, bạn cần truy cập liệu mảng sử dụng biến trỏ, làm C C++ (bạn kiểm tra: Con trỏ C), bạn cần cố định trỏ sử dụng từ khóa fixed C# Sau ví dụ minh họa: using System; namespace UnsafeCodeApplication { class TestPointer { public unsafe static void Main() { http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/csharp/index.jsp int[] Copyright © vietjack.com 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(); } } } Khi code biên dịch thực thi, 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 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 C#: csc /unsafe prog1.cs Nếu bạn sử dụng Visual Studio IDE, bạn cần kích hoạt sử dụng unsafe code project properties Để làm điều này: http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/csharp/index.jsp  Copyright © vietjack.com Mở project properties việc nhấn đúp chuột vào properties node Solution Explorer  Nhấn vào Build tab  Chọn tùy chọn "Allow unsafe code" Như ình ảnh sau: http://vietjack.com/ Trang chia sẻ học online miễn phí Page ... dịch Unsafe Code 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 C# :... namespace UnsafeCodeApplication { class TestPointer { public unsafe static void Main() { http://vietjack.com/ Trang chia sẻ h c online miễn phí Page http://vietjack.com /csharp/ index.jsp int[] Copyright... lệnh sau C# : csc /unsafe prog1.cs Nếu bạn sử dụng Visual Studio IDE, bạn c n kích hoạt sử dụng unsafe code project properties Để làm điều này: http://vietjack.com/ Trang chia sẻ h c online miễn

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

Mục lục

  • Unsafe code trong C#

    • Con trỏ (Pointer) trong C#

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

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

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

    • Biên dịch Unsafe Code trong C#

Tài liệu cùng người dùng

Tài liệu liên quan