Việc sử dụng con trỏ trong C# yêu cầu từ khóa unsafe. Các phần tử mảng có thể được truy cập bằng con trỏ sử dụng từ khóa fixed. Điều này là cần thiết vì kiểu dữ liệu mảng và kiểu con trỏ không giống nhau. Ví dụ: int[] khác với int*.
Ví dụ
using System;
namespace PointerDemo
{
class Example
{
public unsafe static void Main()
{
int[] array = { 55, 23, 90, 76, 9, 57, 18, 89, 23, 5 };
int n = array.Length;
fixed (int* ptr = array)
{
for (int i = 0; i < n; i++)
{
Console.WriteLine("array[{0}] = {1}", i, *(ptr + i));
}
}
}
}
}
Kết quả
array[0] = 55 array[1] = 23 array[2] = 90 array[3] = 76 array[4] = 9 array[5] = 57 array[6] = 18 array[7] = 89 array[8] = 23 array[9] = 5
Giải thích
- Mảng chứa 10 giá trị kiểu
int - Con trỏ
ptrtrỏ đến đầu mảng nhờ từ khóafixed(ngăn garbage collector di chuyển mảng) - Duyệt mảng bằng vòng lặp
for, truy cập phần tử qua*(ptr + i)
Lưu ý quan trọng:
- Phải bật tùy chọn "Allow unsafe code" trong Project Properties → Build
- Code unsafe chỉ nên dùng khi cần tối ưu hiệu suất cực đại hoặc tương tác với unmanaged code
- Trong C# hiện đại, thường dùng
Span<T>hoặcMemory<T>thay vì con trỏ thô