Cho đoạn chương trình sau. Kết quả là
int a, * p, * q;
float * t;
a = 5;
p = & a;
p = q;
t = p;
printf(“ % d % f”, a, t);
int a, * p, * q;
float * t;
a = 5;
p = & a;
p = q;
t = p;
printf(“ % d % f”, a, t);
Trả lời:
Đáp án đúng: C
Đoạn chương trình có lỗi vì kiểu dữ liệu của con trỏ không tương thích. Cụ thể:
1. `int a, *p, *q;`: Khai báo biến `a` kiểu `int` và hai con trỏ `p` và `q` cùng kiểu `int *`.
2. `float *t;`: Khai báo con trỏ `t` kiểu `float *`.
3. `a = 5;`: Gán giá trị 5 cho biến `a`.
4. `p = &a;`: Gán địa chỉ của `a` cho con trỏ `p`.
5. `p = q;`: Gán giá trị của `q` (là một địa chỉ) cho `p`. Tuy nhiên, `q` chưa được khởi tạo, nên `p` sẽ chứa một địa chỉ không xác định (hoặc `NULL` nếu được khởi tạo mặc định).
6. `t = p;`: **Lỗi chính ở đây**. Cố gắng gán giá trị của con trỏ `p` (kiểu `int *`) cho con trỏ `t` (kiểu `float *`). Trong C, việc gán trực tiếp giữa các con trỏ khác kiểu (mà không ép kiểu tường minh) thường dẫn đến lỗi hoặc cảnh báo, vì trình biên dịch không cho phép gán địa chỉ của một biến kiểu `int` cho một biến kiểu `float` một cách trực tiếp.
7. `printf(" %d %f", a, t);`: Lệnh `printf` sử dụng định dạng `%f` để in giá trị mà `t` trỏ tới (dưới dạng số thực dấu phẩy động). Tuy nhiên, `t` đang trỏ tới một vùng nhớ có thể không phải là một số `float` hợp lệ, hoặc thậm chí là một địa chỉ không hợp lệ, nên kết quả là không xác định hoặc gây ra lỗi.
Vì có lỗi gán kiểu con trỏ, chương trình sẽ báo lỗi hoặc cảnh báo khi biên dịch. Do đó, đáp án đúng nhất là "Chương trình lỗi".
Tổng hợp 600+ câu hỏi trắc nghiệm lập trình C có đáp án đầy đủ nhằm giúp các bạn dễ dàng ôn tập lại toàn bộ các kiến thức.
50 câu hỏi 60 phút
Câu hỏi liên quan

FORM.08: Bộ 130+ Biểu Mẫu Thống Kê Trong Doanh Nghiệp

FORM.07: Bộ 125+ Biểu Mẫu Báo Cáo Trong Doanh Nghiệp

FORM.06: Bộ 320+ Biểu Mẫu Hành Chính Thông Dụng

FORM.05: Bộ 330+ Biểu Mẫu Thuế - Kê Khai Thuế Mới Nhất

FORM.04: Bộ 240+ Biểu Mẫu Chứng Từ Kế Toán Thông Dụng
