Trang chủ » Bài 9 – Con trỏ (Phần 1)
Lập trình C/C++

Bài 9 – Con trỏ (Phần 1)

cplusplus

Xin chào mọi người!

Lâu rồi mình mới bắt đầu viết blog lại (chắc khoảng 2 – 3 ngày gì đó :P). Một phần vì hè mình khá lười, một phần vì mình đang quản lý 1 project nho nhỏ nên có thể viết hơi lâu :D. Không lan man nữa, hôm nay mình sẽ giới thiệu về Con trỏ trong C++

Chắc bạn nào khi học C trên trường hoặc sách vở, đều có nghe qua về Con trỏ kèm theo lời mời đầy tính “hăm doạ”, nào là con trỏ khó như trên trời, blah blah,.. Thú thật khi ngày đầu mình học về C/C++, mình cũng khá sợ khi nghe mấy tiền bối bảo Con trỏ rất khó, và đúng là như vậy. Thiết nghĩ 1 người giói về C/C++ thì 95 – 99% người đó phải thành thạo về Con trỏ. Vậy nên bài này mình sẽ giới thiệu 1 cách chi tiết nhất, dễ hiểu nhất có thể về nó 😀

1. Bản chất con trỏ

RAM là nơi lưu trữ biến, hằng, hàm,… của 1 chương trình khi chạy. Mọi chương trình muốn chạy được phải được nạp dữ liệu vào RAM. Cấu trúc của RAM gồm những ô 1 byte, với RAM 1GB ta có 230 ô nhớ 1 byte. Các bạn xem hình dưới đây:

ram

Những dòng chữ màu đỏ là gì vậy? Đó chính là địa chỉ của ô nhớ. Trong bộ nhớ RAM, địa chỉ được đánh số từ 1 đến hết (230 nếu RAM 1GB), nhưng với 1 con số quá lớn nên người ta quy ước sử dụng hệ thập lục phân để ký hiệu các địa chỉ. Ví dụ ở ô đầu tiên có địa chỉ là 0x6D1E1, vậy nó nằm ở ô thứ 446945 (chuyển từ thập lục phân sang thập phân, dễ hiểu mà :D). Trong hệ điều hành Windows 32bit, RAM chỉ có vùng nhớ từ 0x00000000 đến 0x7FFFFFFF.

Nói luyên thuyên nãy giờ chắc các bạn cũng hiểu được đôi chút về RAM rồi nhỉ? Vậy con trỏ rốt cuộc là gì?

Nó chính là biến lưu những địa chỉ trên đấy 😛 (những số như 0x6D1E1 đấy). Đơn giản, dễ hiểu phải không 😀

2. Cú pháp khai báo

Cú pháp khai báo 1 con trỏ như sau:

<kiểu dữ liệu> *<tên con trỏ>;

Ví dụ:

int* a;
int *b;

Lưu ý:

  • Con trỏ phân biệt với biến thường ở dấu * khi khai báo
  • Dấu * có thể đặt ở sau <kiểu dữ liệu>, hoặc trước <tên con trỏ> đều được. Điều đó làm một số bạn hiểu lầm như sau
    int *a,b; // a là con trỏ, b là biến int
    int* a,b; // a vẫn là con trỏ, b cũng là biến int
    // Một số bạn nhầm lẫn cách khai báo dưới là khai báo 2 con trỏ
    
  • Con trỏ cũng có kiểu void.

Trên đây là phần 1 của bài viết về con trỏ. Nhớ đón đọc phần tiếp theo nhé! Cảm ơn các bạn đã theo dõi!

Tags

About the author

Võ Hoài Sơn

Tính tình bất định
Chọc vào là bịnh
Rất yêu lập trình
Luôn code hết mình
Mình hiện đang là sinh viên của trường ĐH Khoa học tự nhiên TPHCM. Bản thân rất thích code, kiêm luôn cả mần thơ nên thường hơi hâm hâm dở dở. Ngoài ra chém gió, chém chuối, chém trái cây các kiểu cũng là sở trường của mình. Rất mong được làm quen với các bạn :D

Add Comment