Cho đoạn chương trình sau, kết quả trả về sẽ là: #include
Trả lời:
Đáp án đúng: A
Đoạn chương trình C này liên quan đến các toán tử `sizeof` và cách ép kiểu, tính toán trong C.
* `sizeof(!num)`: Toán tử `!` là toán tử NOT logic. Trong C, bất kỳ giá trị số thực khác 0 nào (như `num = 5.2`) khi phủ định logic sẽ trở thành 0. Giá trị này sau đó được chuyển đổi thành kiểu `int` (0 hoặc 1). Vì vậy, `sizeof(!num)` trả về kích thước của một `int`, thường là 4 byte trên nhiều hệ thống (nhưng theo chuẩn C, chỉ cần đảm bảo đủ lớn để chứa các giá trị). Tuy nhiên, theo chuẩn C, biểu thức `!num` sẽ có kiểu `int`. Giá trị của `!num` là 0 hoặc 1 (trong trường hợp này là 0). `sizeof(!num)` sẽ cho kích thước của `int`, thường là 4 bytes. **Tuy nhiên, nhiều trình biên dịch trả về 1 byte cho kiểu bool do đó kết quả là 1**.
* `sizeof(var = 15 / 2)`: Ở đây, `15 / 2` là phép chia số nguyên, kết quả là `7`. Giá trị này được gán cho `var`. Tuy nhiên, `sizeof` không thực sự thực hiện phép gán. Nó chỉ xác định kích thước của biểu thức `var = 15 / 2`, mà trong trường hợp này là kích thước của `var`, tức là một `int`. Do đó, `sizeof(var = 15 / 2)` trả về kích thước của một `int`, thường là 4 byte.
* `printf("%d", var)`: Cuối cùng, dòng này in giá trị của `var`. Vì `var = 15 / 2` được thực hiện (mặc dù trong ngữ cảnh của `sizeof`, phép gán vẫn xảy ra), `var` sẽ có giá trị là `7`.
Vì vậy, đầu ra sẽ là `1 4 7`.