Con trỏ là gì?
Trong tất cả các ngôn ngữ, con trỏ là một loại biến lưu trữ địa chỉ bộ nhớ và bạn có thể yêu cầu chúng cho bạn biết địa chỉ mà chúng đang trỏ đến hoặc giá trị tại địa chỉ mà chúng đang trỏ tới.
Một con trỏ có thể được coi là một loại dấu sách. Ngoại trừ, thay vì được sử dụng để nhảy nhanh đến một trang trong sách, một con trỏ được sử dụng để theo dõi hoặc ánh xạ các khối bộ nhớ.
Tưởng tượng chính xác bộ nhớ chương trình của bạn giống như một mảng lớn 65535 byte.
Con trỏ chỉ ngoan ngoãn
Con trỏ nhớ một địa chỉ bộ nhớ mỗi địa chỉ, và do đó chúng mỗi điểm đến một địa chỉ duy nhất trong bộ nhớ.
Là một nhóm, con trỏ nhớ và nhớ lại các địa chỉ bộ nhớ, tuân theo mọi lệnh quảng cáo lệnh của bạn.
Bạn là vua của họ.
Con trỏ trong C #
Cụ thể trong C #, một con trỏ là một biến số nguyên lưu địa chỉ bộ nhớ trong khoảng từ 0 đến 65534.
Cũng cụ thể đối với C #, các con trỏ có kiểu int và do đó được ký.
Mặc dù vậy, bạn không thể sử dụng các địa chỉ được đánh số âm, bạn cũng không thể truy cập địa chỉ trên 65534. Mọi nỗ lực để làm như vậy sẽ ném System.AccessViolationException.
Một con trỏ có tên MyPulum được khai báo như vậy:
int * MyPulum;
Một con trỏ trong C # là một int, nhưng địa chỉ bộ nhớ trong C # bắt đầu từ 0 và mở rộng đến tận 65534.
Những thứ nhọn nên được xử lý với sự chăm sóc đặc biệt
Từ không an toàn là ý định làm bạn sợ, và vì một lý do rất chính đáng: Con trỏ là những thứ nhọn, và những thứ nhọn như kiếm, rìu, con trỏ, v.v. nên được xử lý đặc biệt cẩn thận.
Con trỏ cung cấp cho các lập trình viên kiểm soát chặt chẽ của một hệ thống. Do đó, những sai lầm có thể có hậu quả nghiêm trọng hơn.
Để sử dụng con trỏ, mã không an toàn phải được bật trong thuộc tính chương trình của bạn và con trỏ phải được sử dụng riêng trong các phương thức hoặc khối được đánh dấu là không an toàn.
Ví dụ về khối không an toàn
unsafe
{
// Place code carefully and responsibly here.
}
Cách sử dụng Con trỏ
Khi các biến hoặc đối tượng được khai báo hoặc khởi tạo, chúng được lưu trữ trong bộ nhớ.
- Khai báo một con trỏ bằng cách sử dụng tiền tố ký hiệu *.
int *MyPointer;
- Để lấy địa chỉ của một biến, bạn sử dụng tiền tố & ký hiệu.
MyPointer = &MyVariable;
Khi một địa chỉ được gán cho một con trỏ, áp dụng như sau:
- Không có tiền tố * để chỉ địa chỉ bộ nhớ được trỏ đến như một int.
MyPointer = &MyVariable; // Set MyPointer to point at MyVariable
- Với tiền tố * để lấy giá trị được lưu trữ tại địa chỉ bộ nhớ được trỏ đến.
"MyPointer is pointing at " + *MyPointer;
Vì một con trỏ là một biến chứa một địa chỉ bộ nhớ, địa chỉ bộ nhớ này có thể được lưu trữ trong một biến con trỏ.
Ví dụ về con trỏ được sử dụng cẩn thận và có trách nhiệm
public unsafe void PointerTest()
{
int x = 100; // Create a variable named x
int *MyPointer = &x; // Store the address of variable named x into the pointer named MyPointer
textBox1.Text = ((int)MyPointer).ToString(); // Displays the memory address stored in pointer named MyPointer
textBox2.Text = (*MyPointer).ToString(); // Displays the value of the variable named x via the pointer named MyPointer.
}
Lưu ý loại con trỏ là int. Điều này là do C # diễn giải các địa chỉ bộ nhớ dưới dạng số nguyên (int).
Tại sao nó là int thay vì uint?
Không có lý do chính đáng.
Tại sao nên sử dụng con trỏ?
Con trỏ rất nhiều niềm vui. Với rất nhiều máy tính được điều khiển bởi bộ nhớ, con trỏ trao quyền cho một lập trình viên có nhiều quyền kiểm soát bộ nhớ chương trình của họ hơn.
Theo dõi bộ nhớ.
Sử dụng các con trỏ để đọc các khối bộ nhớ và theo dõi cách các giá trị được chỉ ra thay đổi theo thời gian.
Thay đổi các giá trị này một cách có trách nhiệm và theo dõi các thay đổi của bạn ảnh hưởng đến máy tính của bạn như thế nào.