Mọi người ơi cho mình hỏi bản chất con trỏ trong C/C++ là gì vậy?
Trong C/C++, bản chất con trỏ cũng là một biến như các biến bình thường khác nhưng sự khác biệt cơ bản ở đây đó là biến con trỏ dùng để lưu địa chỉ của biến khác.
#include <stdio.h>
int main(){
int a = 10; // Biến a là một biến bình thường với kiểu dữ liệu số nguyên và có giá trị bằng 10
int *b; // Biến b là biến con trỏ với kiểu dữ liệu số nguyên
int *b = 10; // --> Báo lỗi cú pháp, biến con trỏ không thể lưu một giá trị nào đó
int *b = &a; // --> Đúng, vì biến con trỏ được khai báo để lưu địa chỉ của biến a.
}
Nếu bạn xuất giá trị của hai biến bình thường a
và biến con trỏ b
ở trên thì bạn có thể thấy rõ hơn
#include <stdio.h>
int main(){
int a = 10;
int *b = &a;
printf("%d\n", a); // Sẽ xuất ra màn hình giá trị của a = 10
printf("%d\n", b); // Sẽ xuất ra màn hình địa chỉ của biến a mà con trỏ b đang nắm giữ, ví dụ: 13171940
}
Giá trị của biến a
chắc chắn sẽ giữ nguyên khi bạn khai báo bằng 10, còn địa chỉ của biến a
sẽ khác tùy thuộc vào mỗi thời điểm mà hệ điều hành sẽ cấp phát một ô nhớ nào đó cho biến a
.
Đoạn mã nguồn ở trên dùng để xuất ra màn hình địa chỉ biến con trỏ b
đang nắm giữ (tức là địa chỉ của a
). Nếu bạn muốn truy xuất hoặc xuất ra giá trị của con trỏ b
thì làm có thể sử dụng toán tử *
đứng trước b,
#include <stdio.h>
int main(){
int a = 10;
int *b = &a;
printf("%d\n", a); // Sẽ xuất ra màn hình a = 10
printf("%d\n", *b); // Sẽ xuất ra giá trị của b = 10 (cũng chính là giá trị của a) vì b đang giữ địa chỉ của a.
}
Vì biến con trỏ b
đang nắm giữ địa chỉ của biến a
nên mọi thao tác trên con trỏ b
sẽ làm thay đổi giá trị của biến a
. Đoạn code sau sẽ minh họa cho điều này, bạn có thể đoán xem giá trị của biến a
sau khi chạy chương trình là bao nhiêu?
#include <stdio.h>
int main(){
int a = 10;
int *b = &a; // Con trỏ b đang nắm giữ địa chỉ của biến a
printf("%d\n", a);
printf("%d\n", *b);
int c = 5;
*b = c; // Gán giá trị của con trỏ b = c
printf("%d\n", a); // Xuất ra màn hình giá trị của biến a. Giá trị là bao nhiêu???
}
Bạn có thể tự mình chạy đoạn mã nguồn trên để hiểu hơn về bản chất của con trỏ nhé. Một điều nữa là bản chất và cách sử dụng của con trỏ với truyền tham chiếu trong C/C++ có đặc điểm khá giống nhau, bạn có thể đọc thêm để hiểu thêm về con trỏ nhé. Chúc bạn thành công.
Bản chất con trỏ là một biến dùng để lưu giữ địa chỉ của dữ liệu, và địa chỉ này chính là điểm đầu của vùng chứa dữ liệu đó trong bộ nhớ máy tính.
Link tham khảo: Con trỏ trong C là gì
Tương tự C thì bản chất con trỏ trong C++ là một biến dùng để lưu giữ địa chỉ của dữ liệu, và địa chỉ này chính là điểm đầu của vùng chứa dữ liệu đó trong bộ nhớ máy tính.
Link tham khảo: Con trỏ trong C++ là gì