3. Các phép toán trên biến con trỏ
3.6. Hằng con trỏ:
- Hằng con trỏ NULL: Là một giá trị đặc biệt của biến con trỏ, bất kỳ biến
con trỏ nào nếu được gán giá trị NULL (*<tên biến con trỏ>=NULL) để báo rằng biến con trỏ này không trỏ vào đâu cả (giống như lệnh gán biến so=0).
- Con trỏ chỉ đến đối tượng hằng: Là những con trỏ mà chỉ có thể gán giá
-
- trị cho con trỏ một lần duy nhất, nhưng được phép dùng tham chiếu để thay đổi giá trị của biến.
Kiể u * const p = giá trị;
Ví dụ:
char xau1[] = "ABCDEF”;
char * const p = xau1; //hoặc char* const p=”ABCDEF”; p++; /* sai, vì p xau1, không thay đổi được vùng
nhớ mà p trỏ tới*/
p[2]++; /*đúng vì p[2] xau1[2], hoàn toàn có thể thay đổi giá trị vùng nhớ mà p trỏ đến*/
p[5]=’T’; ‘A’ ‘B’ ‘C’ ‘D’ ‘E’ ‘F’’T’ ‘\0’ 1500 1501 1502 1503 1504 1505 1506 p 1500 p[2] p[4]=’T’ Ký tự ’T’ được ghi đè lên ký tự ‘F’
142
- Con trỏ hằng: Là những con trỏ mà chỉ trỏ vào 1 vùng nhớ cố định, có
thể thay đổi địa chỉ mà nó trỏ đến, nhưng lại không thể tham chiếu để thay đổi giá trị của biến mà nó trỏ đến.
Kiể u const *p = giá trị hằ ng;
hoặ c Const kiể u *p = giá trị hằ ng;
Ví dụ:
char xau2[] = "abcdef";
const char* q = xau2; // hay const char * p = xau2;
q++; // đúng, *q[1]==’b’; *q==”bcdef”;
q[2]++; /* sai, không thay đổi được giá trị trong vùng nhớ */ q[2]=’H’; //sai ‘a’ ‘b’ ‘c’ ‘d’ ‘e’ ’f’ ‘\0’ 1550 1551 1552 1553 1554 1555 1556 - Lưu ý :
• Địa chỉ của một biến được xem như một con trỏ hằng, do đó nó không được phép gán, tăng hoặc giảm.
Ví dụ 10:
int a, b, *p; p = & a;
p ++; // đúng
( & a) ++; /* sai vì địa chỉ của một biến được coi là con trỏ hằng*/
• Con trỏ không trỏ đến biến khác được, cũng không dùng tham chiếu để thay đổi giá trị của biến được.
int x=100;
const int *const px = &x;
px++; //sai, không trỏ sang biến khác được
Giá trị trong vùng nhớ là cố định không thể thay đổi
143
*px=5; /*sai, không thay đổi được giá trị của biến được trỏ đến*/