Truy cập thành viên của struct
Thuộc phần Logic và luồng điều khiển trong hành trình C của Coddy. Bài học 41 trên 63.
Bây giờ bạn đã biết cách tạo biến struct, bạn cần học cách làm việc với dữ liệu được lưu bên trong chúng. Toán tử dấu chấm (.) giúp bạn truy cập và chỉnh sửa từng thành viên của biến struct.
Cú pháp truy cập các thành viên của struct rất đơn giản:
structVariable.memberNameVới ví dụ về struct Point, bạn có thể đọc và ghi các thành viên của nó:
struct Point p1;
// Ghi giá trị vào các thành viên của struct
p1.x = 10;
p1.y = 20;
// Đọc giá trị từ các thành viên của struct
printf("Point coordinates: (%d, %d)\n", p1.x, p1.y);Toán tử dấu chấm hoạt động giống hệt như khi truy cập bất kỳ biến nào khác: bạn có thể dùng nó trong phép gán, phép toán số học, lời gọi hàm hoặc bất cứ nơi nào bạn dùng một biến thông thường thuộc kiểu đó. Mỗi thành viên hoạt động như một biến độc lập thuộc kiểu đã khai báo, cho phép bạn thao tác với dữ liệu của struct một cách có tổ chức và trực quan.
Thử thách
DễTạo một chương trình C minh họa cách truy cập và sửa đổi các thành viên của struct bằng toán tử dấu chấm. Chương trình của bạn cần:
- Định nghĩa một
structcó tênCarvới các thành viên sau:- Một số nguyên
yearđể lưu năm sản xuất - Một mảng ký tự
brandcó kích thước 20 để lưu thương hiệu xe - Một số nguyên
mileageđể lưu số dặm hiện tại - Một số thực
priceđể lưu giá xe
- Một số nguyên
- Tạo một biến
Carcó tênmyCar - Đọc các giá trị đầu vào sau và gán chúng cho các thành viên của struct bằng toán tử dấu chấm:
- Đọc một số nguyên cho năm và gán số đó cho
myCar.year - Đọc một chuỗi cho thương hiệu và gán chuỗi đó cho
myCar.brand - Đọc một số nguyên cho số dặm và gán số đó cho
myCar.mileage - Đọc một số thực cho giá xe và gán số đó cho
myCar.price
- Đọc một số nguyên cho năm và gán số đó cho
- Sau khi đọc tất cả giá trị, thực hiện các thao tác sau:
- Tăng số dặm thêm 1000 bằng cách dùng
myCar.mileage += 1000; - Giảm giá xe đi 500.0 bằng cách dùng
myCar.price -= 500.0;
- Tăng số dặm thêm 1000 bằng cách dùng
- In thông tin xe bằng cách dùng toán tử dấu chấm để truy cập từng thành viên theo đúng định dạng sau:
Car Details:Year: [year]Brand: [brand]Mileage: [mileage]Price: [price]
Thử thách này kiểm tra mức độ hiểu của bạn về toán tử dấu chấm khi đọc và ghi các thành viên của struct. Bạn sẽ luyện tập cách gán giá trị cho các thành viên của struct, thực hiện các phép toán số học trên chúng và truy cập chúng để in ra.
Ví dụ, nếu đầu vào là:
2020
Toyota
50000
25000.50Đầu ra của bạn cần là:
Car Details:
Year: 2020
Brand: Toyota
Mileage: 51000
Price: 24500.50Tự làm thử
#include <stdio.h>
#include <string.h>
// TODO: Định nghĩa struct Car ở đây
int main() {
// TODO: Tạo biến (variable) Car tên là myCar
// Đọc các giá trị (value) đầu vào
int year;
char brand[20];
int mileage;
float price;
scanf("%d", &year);
scanf("%s", brand);
scanf("%d", &mileage);
scanf("%f", &price);
// TODO: Gán các giá trị đầu vào cho các thành viên của struct bằng toán tử (operator) dấu chấm
// TODO: Sửa mileage và price theo yêu cầu
// TODO: In ra thông tin xe bằng toán tử dấu chấm
printf("Car Details:\n");
// In Year, Brand, Mileage và Price ở đây
return 0;
}Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Logic và luồng điều khiển
1Nền tảng về con trỏ
Con trỏ là gì?Khai báo con trỏToán tử lấy địa chỉ (&)Toán tử giải tham chiếu (*)Con trỏ NULLÔn tập: kiến thức cơ bản về con trỏ4Dự án: Công cụ xử lý văn bản đơn giản
Tổng quan dự ánĐếm ký tự7Cấu trúc (struct)
Struct là gì?Khai báo structTạo biến structTruy cập thành viên của structKhởi tạo structÔn tập: struct dữ liệu học sinh2Con trỏ và mảng
Tên mảng dưới dạng con trỏPhần tử mảng và con trỏPhép toán con trỏSo sánh con trỏÔn tập: duyệt mảng bằng con trỏ5Con trỏ và hàm
Truyền theo giá trịTruyền con trỏ vào hàmSửa đổi biến qua con trỏVí dụ kinh điển: hoán đổiTruyền mảng vào hàmÔn tập: đối số con trỏ hàm3Mảng ký tự và chuỗi
Chuỗi dưới dạng mảng charKý tự kết thúc nullNhập chuỗi bằng scanfDùng strlen()Dùng strcpy()Dùng strcat()Dùng strcmp()Ôn tập: các hàm xử lý chuỗi cơ bản6Quản lý bộ nhớ
Bộ nhớ ngăn xếp và bộ nhớ heapCấp phát động với malloc()Dùng sizeof() để cấp phátKiểm tra lỗi cấp phátGiải phóng bộ nhớ với free()Cấp phát với calloc()Ôn tập: Mảng động9Dự án: Nhập thông tin liên hệ đơn giản
Định nghĩa struct ContactHàm tạo liên hệTự luyện tập: Trình biên dịch C online