Con trỏ trong C rất dễ hiểu và thú vị để tìm hiểu. Một số công việc lập trình C được thực hiện dễ dàng hơn với con trỏ, và các nhiệm vụ khác, chẳng hạn như cấp phát bộ nhớ động, không thể được thực hiện mà không sử dụng con trỏ. Vì vậy, nó trở nên cần thiết để tìm hiểu con trỏ để trở thành một lập trình viên C hoàn hảo. Chúng ta hãy bắt đầu học chúng trong các bước đơn giản và dễ dàng sau.
Như bạn đã biết, mỗi biến là một vị trí bộ nhớ và mỗi vị trí nhớ có địa chỉ của nó được xác định mà có thể được truy cập bằng cách sử dụng toán tử &, biểu thị một địa chỉ trong bộ nhớ. Hãy xem xét ví dụ sau đây, mà sẽ in địa chỉ của các biến được định nghĩa:
Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra một cái gì đó cho kết quả như sau:
Vì vậy, bạn hiểu địa chỉ bộ nhớ và làm thế nào để truy cập nó như thế nào, vì vậy cơ sở của khái niệm đã qua. Bây giờ chúng ta hãy xem một con trỏ là gì.
Con trỏ là gì?
Một con trỏ là một biến có giá trị là địa chỉ của một biến khác, ví dụ, địa chỉ trực tiếp của vị trí bộ nhớ. Giống như bất kỳ biến hoặc hằng số, bạn phải khai báo một con trỏ trước khi bạn có thể sử dụng nó để lưu trữ bất kỳ địa chỉ biến. Hình thức chung của một khai báo biến con trỏ là:
type *var-name;
Ở đây, type là kiểu cơ bản của con trỏ, nó phải là một kiểu dữ liệu hợp lệ thuộc C và var-name là tên của biến con trỏ. Dấu * bạn sử dụng để khai báo một con trỏ là dấu tương tự mà bạn sử dụng để nhân giống. Tuy nhiên, trong khai báo này, các dấu * được sử dụng để chỉ một biến như là một con trỏ. Sau đây là các khai báo con trỏ hợp lệ:
Các kiểu dữ liệu thực tế của các giá trị của tất cả các con trỏ, kiểu số nguyên, kiểu số thực, kí tự, hay nói cách khác là như nhau, một số thập lục dài đại diện cho một địa chỉ bộ nhớ. Sự khác biệt duy nhất giữa con trỏ của các loại dữ liệu khác nhau là kiểu dữ liệu của biến hoặc hằng số mà con trỏ trỏ tới.
Làm thế nào để sử dụng con trỏ?
Có rất ít các hoạt động quan trọng, mà chúng tôi sẽ làm việc với sự giúp đỡ của con trỏ rất thường xuyên. (a) chúng ta định nghĩa một biến con trỏ (b) chỉ định địa chỉ của một biến cho một con trỏ và (c) cuối cùng truy cập vào các giá trị tại các địa chỉ có sẵn trong biến con trỏ. Điều này được thực hiện bằng cách sử dụng toán tử *, nó trả về giá trị của biến nằm ở địa chỉ được chỉ định bởi số hạng của nó. Hãy xem ví dụ sau đây bạn sẽ hiểu :
Con trỏ NULL trong C
Trường hợp bạn không có một biến nào xác định bạn nên gán cho biến con trỏ một giá trị là NULL. Điều này được thực hiện tại thời điểm khai báo biến. Một con trỏ được gán NULL được gọi là null pointer
Con trỏ NULL là một hằng số với một giá trị số không được định nghĩa trong một số thư viện chuẩn. Hãy xem xét các chương trình sau đây:
Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra các kết quả sau đây:
The value of ptr is 0
Trên hầu hết các hệ điều hành, các chương trình không được phép truy cập vào bộ nhớ tại địa chỉ 0 bởi vì bộ nhớ được bảo vệ bởi hệ điều hành. Tuy nhiên, các địa chỉ bộ nhớ 0 có ý nghĩa đặc biệt; nó báo hiệu rằng con trỏ không dùng để trỏ đến một vị trí bộ nhớ truy cập.Nhưng theo quy ước, nếu một con trỏ chứa giá trị null (0), nó được giả định để trỏ đến không có gì.
Để kiểm tra cho một con trỏ null, bạn có thể sử dụng một tuyên bố nếu như sau:
if(ptr) /* Thành công nếu ptr không phải null */
if(!ptr) /* Thành công nếu ptr là null */
0 nhận xét:
Đăng nhận xét