Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Truy cập phần tử mảng bằng ký hiệu con trỏ trong C#


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ỏ ptr trỏ đến đầu mảng nhờ từ khóa fixed (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ặc Memory<T> thay vì con trỏ thô