Đầu ra của đoạn mã sau là gì? const int x = 5; void main() { int x[x] int y = sizeof(x) / sizeof(int); printf("%d", y); getch(); }
Trả lời:
Đáp án đúng: B
Đoạn mã có một số lỗi cú pháp nghiêm trọng.
1. `const int x = 5;` Khai báo một hằng số nguyên `x` có giá trị là 5.
2. `int x[x]` Khai báo một mảng `x` với kích thước `x` (tức là 5). Đây là nơi có lỗi. Trong C/C++, kích thước mảng phải là một hằng số biên dịch (compile-time constant). Tuy nhiên, trong C99 và các phiên bản C sau này, tính năng mảng có kích thước thay đổi (variable-length array - VLA) được giới thiệu, cho phép kích thước mảng được xác định tại thời điểm chạy. Đoạn code này sẽ biên dịch được nếu được biên dịch bằng trình biên dịch C hỗ trợ VLA, còn với C++ thì sẽ báo lỗi.
3. `int y = sizeof(x) / sizeof(int);` Tính kích thước của mảng `x` (5 * sizeof(int)) và chia cho kích thước của một phần tử int (sizeof(int)). Kết quả là số lượng phần tử trong mảng `x`, tức là 5.
4. `printf("%d", y);` In giá trị của `y` ra màn hình. `y` bằng 5.
Vì vậy, đáp án đúng là B. 5