Khởi tạo 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 42 trên 63.
Bạn có thể tạo các biến struct rồi gán giá trị cho từng thành viên, nhưng C cung cấp một cách thuận tiện hơn để thiết lập giá trị ban đầu. Bạn có thể khởi tạo biến struct ngay khi khai báo bằng một danh sách khởi tạo đặt trong dấu ngoặc nhọn.
Cú pháp khởi tạo struct là:
struct StructureName variableName = {value1, value2, ...};Với ví dụ về struct Point, bạn có thể khai báo và khởi tạo nó trên cùng một dòng:
struct Point p1 = {10, 20};Lệnh này tạo một biến Point có tên p1, với x được đặt thành 10 và y được đặt thành 20. Các giá trị trong danh sách khởi tạo được gán cho các thành viên của struct theo thứ tự chúng được khai báo trong định nghĩa struct.
Cách khởi tạo này không chỉ ngắn gọn hơn so với việc gán từng giá trị riêng, mà còn đảm bảo struct bắt đầu với các giá trị có ý nghĩa thay vì dữ liệu rác ngẫu nhiên. Cách này đặc biệt hữu ích khi bạn biết các giá trị ban đầu tại thời điểm biên dịch và muốn tạo biến struct sẵn sàng sử dụng một cách hiệu quả.
Thử thách
DễTạo một chương trình C minh họa cách khởi tạo struct bằng danh sách khởi tạo. Chương trình cần:
- Định nghĩa một
structtên làEmployeevới các thành viên sau:- Một số nguyên
idđể lưu ID của nhân viên - Một mảng ký tự
departmentcó kích thước 15 để lưu tên phòng ban - Một số nguyên
yearsOfServiceđể lưu số năm công tác - Một số thực
salaryđể lưu mức lương của nhân viên
- Một số nguyên
- Tạo ba biến
Employeebằng danh sách khởi tạo với dữ liệu sau:emp1: ID 101, phòng ban "Engineering", 5 năm công tác, mức lương 75000.50emp2: ID 102, phòng ban "Marketing", 3 năm công tác, mức lương 65000.25emp3: ID 103, phòng ban "Sales", 8 năm công tác, mức lương 80000.75
- In thông tin của từng nhân viên theo đúng định dạng sau:
Employee 1:ID: [id]Department: [department]Years of Service: [yearsOfService]Salary: [salary]Employee 2:ID: [id]Department: [department]Years of Service: [yearsOfService]Salary: [salary]Employee 3:ID: [id]Department: [department]Years of Service: [yearsOfService]Salary: [salary]
- Tính và in tổng mức lương của cả ba nhân viên theo định dạng:
Total Salary: [total] - Tính và in số năm công tác trung bình theo định dạng:
Average Years of Service: [average]
Thử thách này kiểm tra mức độ hiểu của bạn về cách khởi tạo struct bằng danh sách khởi tạo, trong đó bạn khai báo và khởi tạo biến struct trên cùng một dòng. Các giá trị trong danh sách khởi tạo phải theo đúng thứ tự khai báo các thành viên trong định nghĩa struct.
Kết quả đầu ra dự kiến là:
Employee 1:
ID: 101
Department: Engineering
Years of Service: 5
Salary: 75000.50
Employee 2:
ID: 102
Department: Marketing
Years of Service: 3
Salary: 65000.25
Employee 3:
ID: 103
Department: Sales
Years of Service: 8
Salary: 80000.75
Total Salary: 220001.50
Average Years of Service: 5.33Tự làm thử
#include <stdio.h>
// TODO: Định nghĩa struct Employee tại đây
int main() {
// TODO: Tạo ba biến Employee bằng danh sách khởi tạo
// TODO: In ra thông tin của từng nhân viên
// TODO: Tính và in ra tổng lương cùng số năm làm việc trung bình
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