Lập trình

Lập trình

Thứ Sáu, 20 tháng 6, 2014

Con trỏ hằng và hằng con trỏ

Con trỏ hằng và hằng con trỏ là hai khái niệm rất khác nhau và dễ nhầm lẫn hôm nay ta đến với khái niệm và cách dùng của 2 kiểu con trỏ trên :

Định nghĩa :
Ở đây theo việt hóa mà nói thì :
- Con trỏ hằng là con trỏ trỏ đến một vùng nhớ cố định , thông qua con trỏ ta không thể thay đổi giá trị của vùng nhớ đó , nhưng con trỏ có thể trỏ đến vùng nhớ khác . VD : char *p = "Chao cac ban";
  Ở trên p trỏ đến vùng nhớ "Chao cac ban"  không thể làm thay đối giá trị của vùng nhớ đó , nhưng rõ ràng p có thể trỏ đến vùng nhớ khác .
-Hằng con trỏ là con trỏ trỏ đến cố định một vùng nhớ , tức là ta không thể khiến con trỏ trỏ đến vị trí khác , nhưng qua con trỏ ta có thể làm thay đổi giá trị của vùng nhớ đó . VD : int pt[100];
Ở đây pt trỏ đến cố định một vùng nhớ (chứa 100 phần tử của mảng) , nhưng qua pt ta có thể làm thay đổi giá trị của vùng nhớ : pt[5] = 9;*(pt+4) = 10; không hề sai.

Cách khai báo :
Trước tiên ta đến với cách khai báo hằng trong biến bình thường , ta có 2 cách để khai báo hằng của biến bình thường :
const kieu_gia_tri ten_bien;
hoặc kieu_gia_tri const ten_bien;

Ta thấy không sự khác biệt trong tác dụng của định nghĩa hằng của biến thông thường kiểu này , nhưng khi chuyển qua con trỏ ta cần phân biệt 2 cách sử dụng này !

Xét cách khai báo 1:
kieu_du_lieu *const ten_con_tro; 
ta thấy ở biến bình thường kiểu dữ liệu được viết là kieu_du_kieu , sang bên con trỏ được viết kieu_du_lieu * ,thực chất kiểu dữ liệu của con trỏ là int * , char * ,....

đây là cách khai báo một hằng con trỏ vd :
   
        int g,h;
int * const pt = &g; // khai bao mot hang con tro
cout << pt;
*pt = 9;
pt = &h; // Sai vi pt la hang con tro
Khi nói một thứ là hằng thì những thuộc tính mà nó đại diện không đổi trong quá trình làm việc , ví dụ biến thì có thuộc tính lưu trữ giá trị khi coi nó là hằng thì giá trị của biến không đổi , qua con trỏ , con trỏ có thuộc tính lưu trữ địa chỉ thì khi con trỏ coi là con trỏ hằng thì địa chỉ mà nó lưu trữ luôn không đổi.

-Xét cách khai báo 2 :
const kieu_gia_tri* ten_con_tro ; là cách khai báo một con trỏ hằng.

Không có nhận xét nào:

Đăng nhận xét