Đâu là kết quả của đoạn mã sau: struct Employee { char Code[], name[] long Salary; }; Employee e1 = { “ E089”, “Hoang so”, 12000 }, e2 = e1; printf(“ % ld”, el.Salary + e2 -> Salary);
Trả lời:
Đáp án đúng: C
Đoạn mã C có một số lỗi sau:
1. **Khai báo mảng `char Code[]` và `name[]`:** Trong C, khi khai báo một mảng ký tự (chuỗi) bên trong một cấu trúc, bạn cần chỉ định kích thước của mảng hoặc sử dụng con trỏ `char*`. Việc để trống `[]` như trên là không hợp lệ. Nó chỉ đúng khi khai báo tham số cho hàm, nhưng không dùng được trong struct.
2. **Truy cập thành viên cấu trúc qua con trỏ:** Trong biểu thức `e2 -> Salary`, `e2` không phải là một con trỏ. `e2` là một biến cấu trúc `Employee`, vì vậy bạn phải sử dụng toán tử `.` (chấm) để truy cập thành viên của nó, ví dụ: `e2.Salary`. Toán tử `->` chỉ được dùng khi bạn có một con trỏ đến cấu trúc.
3. **`printf` Format Specifier**: `%ld` thường được sử dụng để in ra các giá trị kiểu `long int`. Tuy nhiên, trong nhiều hệ thống, `long` và `int` có cùng kích thước, vì vậy việc sử dụng `%d` (cho `int`) cũng có thể hoạt động. Tuy nhiên, `%ld` là chính xác hơn để đảm bảo tính tương thích.
Vì những lỗi này, đoạn mã sẽ không biên dịch được hoặc sẽ gây ra lỗi runtime. Do đó, đáp án đúng nhất là "Đoạn mã bị lỗi".





