Tất tần tật về con trỏ trong ngôn ngữ C++
Con trỏ là một công cụ rất quan trọng và có công dụng vô cùng mạnh mẽ. Nếu bạn muốn trở thành một lập trình viên chuyên nghiệp thì việc thành thạo cách sử dụng con trỏ là điều không thể thiếu. Trong bài viết này, Isinhvien sẽ cùng các bạn đi tìm hiểu tất tần tật về con trỏ trong ngôn ngữ C++ nhé!
Con trỏ trong C++ là gì?
Con trỏ là công cụ mạnh nhất trong C++, nó giúp chúng ta truy cập và thao tác trực tiếp với bộ nhớ. Con trỏ giúp cho việc cấp phát bộ nhớ động được thực hiện đơn giản hơn, nó tăng tốc độ thực thi khi hàm trả về một giá trị và cũng hỗ trợ trong việc truy cập một biến được định nghĩa bên ngoài hàm. Con trỏ được sử dụng phổ biến trong việc quản lí dữ liệu và truy cập các đến thành phần trong lớp.
Cú pháp khai báo con trỏ
Kiểu_dữ_liệu * tên_biến_con_trỏ ;
Biến con trỏ có thể trỏ đến biến nguyên, biến ký tự, mảng, tệp, hàm.
Ví dụ:
int *a; // biến con trỏ tới một số nguyên float *b; // biến con trỏ tới một số thực
Gán giá trị cho con trỏ
Vì con trỏ là một biến chứa địa chỉ nên khi gán giá trị cho con trỏ thì giá trị đó phải là một địa chỉ.
Ví dụ:
int a, *b=&a; // Đúng
int a, *b; *b=&a; // Sai
int a, *b; b = &a;// Đúng
int a; double *b=&a; // Sai vì con trỏ double không thể trỏ đến địa chỉ // biến int
Để con trỏ được phép trỏ đến bất kì kiểu dữ liệu nào, ta dùng con trỏ “void”, kiểu này được sử dụng để chuyển con trỏ đến các hàm hoạt động độc lập với kiểu dữ liệu được trỏ tới.
Ví dụ:
int a; void *b=&a;
Để hiểu rõ hơn thì các bạn hãy xem ví dụ tổng quát dưới đây nhé!
#include <iostream> using namespace std; int main () { int x, *px; float f, *pf; void *vp; x=3; f=45.2; px=&x; pf=&f; vp=&x; cout<< "the value pointed by px is "<<*px<< endl; cout<< "The address of x is "<< px <<endl; cout<< "the value pointed by pf is "<<*pf<< endl; cout<< "The address of f is "<< pf <<endl; cout<< "The address of x is "<<vp <<endl; vp= &f; cout<< "the address of f is "<<vp<<endl; }
Kết quả
the value pointed by px is 3 The address of x is 0x61feb0 the value pointed by pf is 45.2 The address of f is 0x61feac The address of x is 0x61feb0 the address of f is 0x61feac
Phép toán cộng và trừ trên con trỏ
Giả sử ta có con trỏ pa đang trỏ đến biến a có địa chỉ là 1000.
int a; int *pa; pa=&a;
++pa hoặc pa++ | pa trỏ đến địa chỉ đứng kế sau a (1004 do a là biến int (4 byte), địa chỉ của biến a không đổi |
— pa hoặc p — | pa trỏ đến địa chỉ đứng kế trước a (996), địa chỉ của biến a không đổi |
pa + i | pa trỏ đến vị trí (1000 +4i), địa chỉ của biến a không đổi |
pa – i | pa trỏ đến vị trí (1000-4i), địa chỉ của biến a không đổi |
++*pa hoặc (*pa)++ | Sẽ tăng giá trị a thêm 1 |
–*pa hoặc (*pa) — | Sẽ giảm giá trị a bớt 1 |
*pa++ | pa trỏ đến địa chỉ kế sau a (1004) |
Con trỏ NULL
Đây là con trỏ không chứa địa chỉ nào cả, Ta có thể gán giá trị NULL cho 1 con trỏ có kiểu dữ liệu bất kỳ.
Ví dụ
int *a=NULL;
Trên đây là những chia sẻ của Isinhvien về con trỏ trong ngôn ngữ lập trình C++. Nếu các bạn thấy bài viết này hay, bổ ích hãy để lại 1 like, 1 cmt để tạo động lực cho Isinhvien ngày càng phát triển hơn nhé! Đừng quên theo dõi Isinhvien để cập nhật thêm các kiến thức hay mỗi ngày. Chúc các bạn thành công!