3
Bản chất con trỏ trong C/C++ là gì?
1
Trúc Phương10 đã đăng:

Mọi người ơi cho mình hỏi bản chất con trỏ trong C/C++ là gì vậy?

thêm bình luận...
2
Minh Danh60 đã đăng:

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ổ sung 6.4 năm trước bởi
Zootopia60
Không lòng vòng anh như Hải Phòng

Dễ hiểu quá, cảm ơn bạn đã chia sẻ. Bạn có thể cho mình biết thêm khi nào mình sử dụng biến con trỏ không ạ?

Trúc Phương 09.12.2017
2

Sử dụng con trỏ trong C/C++ rất khó và dễ bị lỗi. Đa số các bài tập ở trường chỉ dừng lại ở việc tìm hiểu bản chất con trỏ cơ bản. Nếu bạn muốn học sâu về ngôn ngữ C/C++ thì mới nên đào sâu về con trỏ còn không thì hạn chế sử dụng con trỏ ít nhất có thể nhé. Về một số trường hợp sử dụng con trỏ như:

  • Mảng động
  • Cấp phát bộ nhớ động
  • Truyền con trỏ vào hàm
  • Một số cấu trúc dữ liệu như danh sách liên kết, hàng đợi, stack, ...

Mình chỉ nêu ra một số trường hợp cơ bản mà có thể chúng ta sẽ được học trong chương trình dạy, mặc dù cơ bản nhưng để hiểu và sử dụng mấy cái này với con trỏ cũng cần rất nhiều kiến thức. Còn rất rất nhiều kỹ thuật cấp cao khác nếu có dịp bạn từ từ tìm hiểu nhé.

Minh Danh 09.12.2017

Cảm ơn bạn nhiều.

Trúc Phương 09.12.2017
thêm bình luận...
0
Cộng đồng đã đă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ì

thêm bình luận...
0
Cộng đồng đã đăng:

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ì

thêm bình luận...
Bạn đang thắc mắc? Ghi câu hỏi của bạn và đăng ở chế độ cộng đồng (?)