Thông thường có một con trỏ hoặc một tham chiếu đến một cấu trúc (hoặc lớp). Như bạn đã học trước đây, bạn có thể chọn thành viên của một cấu trúc bằng cách sử dụng toán tử lựa chọn thành viên (.):
struct Person
{
int age{};
double weight{};
};
Person person{};
// Member selection using actual struct variable
person.age = 5;
Cú pháp này cũng hoạt động để tham khảo:
/*
Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
@author cafedevn
Contact: cafedevn@gmail.com
Fanpage: https://www.facebook.com/cafedevn
Group: https://www.facebook.com/groups/cafedev.vn/
Instagram: https://instagram.com/cafedevn
Twitter: https://twitter.com/CafedeVn
Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
Pinterest: https://www.pinterest.com/cafedevvn/
YouTube: https://www.youtube.com/channel/UCE7zpY_SlHGEgo67pHxqIoA/
*/
struct Person
{
int age{};
double weight{};
};
Person person{}; // define a person
// Member selection using reference to struct
Person &ref{ person };
ref.age = 5;
Tuy nhiên, với một con trỏ, bạn cần sử dụng toán tử mũi tên:
struct Person
{
int age{};
double weight{};
};
Person person{};
// Member selection using pointer to struct
Person *ptr{ &person };
ptr->age = 5;
Toán tử mũi tên thực hiện tương tự như một chuyển hướng theo sau là. nhà điều hành lựa chọn thành viên
(*ptr).age = 5;
// same as
ptr->age = 5;
Lưu ý rằng chuyển hướng qua con trỏ phải được đặt trong dấu ngoặc đơn, vì toán tử lựa chọn thành viên có quyền ưu tiên cao hơn toán tử chuyển hướng.
Toán tử mũi tên không chỉ dễ nhập hơn mà còn ít bị lỗi hơn nhiều vì quá trình điều hướng được thực hiện ngầm cho bạn, vì vậy không có vấn đề ưu tiên nào phải lo lắng. Do đó, khi thực hiện truy cập thành viên thông qua một con trỏ, luôn sử dụng toán tử -> thay vì toán tử chấm(.)
Qui định
Khi sử dụng con trỏ để truy cập giá trị của một thành viên, hãy sử dụng toán tử-> thay vì toán tử chấm(.) (toán tử.)
Toán tử lựa chọn thành viên luôn được áp dụng cho biến đang được chọn. Nếu bạn có sự kết hợp giữa các biến thành viên con trỏ và bình thường, bạn có thể xem các lựa chọn thành viên ở đâu. và -> là hỗn hợp.
/*
Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
@author cafedevn
Contact: cafedevn@gmail.com
Fanpage: https://www.facebook.com/cafedevn
Group: https://www.facebook.com/groups/cafedev.vn/
Instagram: https://instagram.com/cafedevn
Twitter: https://twitter.com/CafedeVn
Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
Pinterest: https://www.pinterest.com/cafedevvn/
YouTube: https://www.youtube.com/channel/UCE7zpY_SlHGEgo67pHxqIoA/
*/
#include <iostream>
#include <string>
struct Paw
{
int claws{};
};
struct Animal
{
std::string name{};
Paw paw{};
};
int main()
{
Animal puma{ "Puma", { 5 } };
Animal* pointy{ &puma };
// pointy is a pointer, use ->
// paw is not a pointer, use .
std::cout << pointy->paw.claws << '\n';
return 0;
}
Cài ứng dụng cafedev để dễ dàng cập nhật tin và học lập trình mọi lúc mọi nơi tại đây.
Nguồn và Tài liệu tiếng anh tham khảo:
Tài liệu từ cafedev:
- Full series tự học C++ từ cơ bản tới nâng cao tại đây nha.
- Ebook về C++ tại đây.
- Các series tự học lập trình MIỄN PHÍ khác
- Nơi liên hệ hợp tác hoặc quảng cáo cùng Cafedevn tại đây.
Nếu bạn thấy hay và hữu ích, bạn có thể tham gia các kênh sau của cafedev để nhận được nhiều hơn nữa:
Chào thân ái và quyết thắng!