Con trỏ (pointer) từ cơ bản tới nâng cao phần 3


Constant pointer và pointer to constant

Bài hôm nay chúng ta chỉ học về 2 khái niệm này thôi. Đây là 2 khái niệm rất hay và cũng rất dễ sai trong ngôn ngữ C.
Nếu các bạn chưa học về con trỏ hay chưa biết gì luôn về con trỏ thì các bạn nên tham khảo link này:
Con trỏ từ cơ bản tới nâng cao phần 1
Con trỏ từ cơ bản tới nâng cao phần 2
Bây giờ chúng ta đi tiếp!

Constant pointer

Constant pointer tạm dịch là hằng con trỏ. Hằng con trỏ là một con trỏ, nhưng khi đã trỏ tới một vùng nhớ nào rồi, thì chúng ta không thể cho nó trỏ tới vùng nhớ khác được. Nhưng chúng ta vẫn có thể thay đổi data của vùng nhớ đó. Xem ví dụ sau nhé:

#include <stdio.h>

int main()
{
    int a = 10;
    int *const ptr = &a;
    *ptr = 5; // right
    ptr++;    // báo lỗi 
    return 0;
}

Vây cú pháp khai báo hằng con trỏ như sau:

[kiểu dữ liệu] *const [tên con trỏ];
// ở ví dụ trên là:
int *const ptr;

Pointer to constant

pointer to constant tạm dịch là con trỏ trỏ tới một vùng nhớ hằng. Nghĩa là vùng nhớ con trỏ trỏ tới sẽ không thể nào thay đổi được, còn con trỏ thì muốn trỏ đi đâu thì tùy.
Xém ví dụ sau:

#include <stdio.h>

int main()
{
    const int a = 10; // hoặc int a = 10;
    const int *ptr = &a;  
    *ptr = 5; // báo lỗi
    ptr++;    // right
}

Cú pháp khai báo pointer to constant như sau:

const [kiểu dữ liệu] *[tên con trỏ];
// ở ví dụ trên là:
const int* ptr;

Rất khó nhớ phải không nào? Bây giờ chúng ta sẽ có một cách rất dễ nhớ:

int const  *ptr; // ptr is a pointer to constant int 
int *const ptr;  // ptr is a constant pointer to int

Chúng ta đọc từ phải qua trái là dễ nhớ lắm!
Chúng ta tạm kết thúc ở đây nhé!

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s