C/C++

Con trỏ hằng và hằng con trỏ trong C++

Giới thiệu

Đối với người khi bắt đầu lập trình với con trỏ trong C++ đều gặp rất nhiều khó khăn. Đa số là hiểu nhầm giá trị và địa chỉ của con trỏ. Vì giá trị của con trỏ chứa địa chỉ của một biến khác nên các bạn hay nhầm lẫn, dẫn đến phát sinh lỗi trong quá trình viết mã nguồn. Trong bài viết này mình sẽ đề cập đến con trỏ hằng và hằng con trỏ, hai loại con trỏ này có gì khác nhau.

Sơ lược về con trỏ

Mọi biến trong chương trình đều có một địa chỉ duy nhất và nó hoàn toàn là không thay đôi. Biến con trỏ cũng là một biến trong ngôn ngữ lập trình C++. Nó cũng có địa chỉ như những biến khác nhưng  biến con trỏ khác với mọi biến thông thường là giá trị của con trỏ lại lưu địa chỉ của một biến khác. Biến con trỏ luôn có kích thước là 4bytes trong môi trường windows 32bit và 8bytes trong môi trường windows 64bit.

Hình ảnh cho thấy bản chất của con trỏ.

contro_0

Ở trên ta có 3 biến con trỏ p, q, r có địa chỉ lần lượt là 0x0004, 0x0008, 0x0040 trỏ đến vùng nhớ có địa chỉ 0x0080 lưu giá trị 79.

Con trỏ hằng

Cú pháp khai báo con trỏ hằng:

const <kiểu dữ liệu> *<tên biến> = địa chỉ mà con trỏ trỏ tới

Con trỏ hằng là con trỏ trỏ đến một địa chỉ mà chúng ta không thể thay đổi giá trị lưu ở địa chỉ mà nó trỏ tới. Nhưng các phép toán tăng giảm địa chỉ của con trỏ hoàn toàn hợp lệ:

Ví dụ:

Hằng con trỏ

Cú pháp khai báo hằng con trỏ

<kiểu dữ liệu>* const <tên biến> = địa chỉ mà con trỏ trỏ tới.

Hằng cho trỏ là con trỏ trỏ tới một địa chỉ cố định. Nghĩa là giá trị của con trỏ sẽ không bao giờ thay đổi (Địa chỉ biến mà con trỏ trỏ tới). Nếu chúng ta cố tình vi phạm thì trình biên dịch sẽ báo lỗi. Chúng ta có thể thay đổi giá trị của vùng nhớ mà con trỏ trỏ đến.

Ví dụ:

 

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.