Nếu có khai báo:
char *ptr;
char msg[10]
char v;
Câu nào sẽ đúng?
Trả lời:
Đáp án đúng: B
Phân tích:
Câu hỏi kiểm tra kiến thức về con trỏ và cách gán giá trị cho con trỏ trong C.
ptr là một con trỏ kiểu char *
, tức là nó trỏ đến một vùng nhớ chứa một ký tự (char) hoặc một chuỗi ký tự.
msg là một mảng các ký tự (char msg[10]
), hay nói cách khác, nó là một chuỗi ký tự có kích thước tối đa là 10.
v là một biến kiểu ký tự (char v
), nó chứa một ký tự đơn.
Đánh giá các phương án:
- A.
ptr = v;
: Sai.ptr
là một con trỏ (địa chỉ), cònv
là một ký tự. Bạn không thể gán trực tiếp một ký tự cho một con trỏ. Cần phải gán địa chỉ củav
choptr
, ví dụ:ptr = &v;
- B.
ptr = msg;
: Đúng. Trong C, tên của một mảng (trong hầu hết các trường hợp) tự động được chuyển đổi thành một con trỏ đến phần tử đầu tiên của mảng đó. Vì vậy,msg
tương đương với&msg[0]
, tức là địa chỉ của ký tự đầu tiên trong mảngmsg
. Do đó, việc gánptr = msg;
là hợp lệ, vì cả hai đều là địa chỉ của kiểuchar
. - C. Cả hai câu đều đúng: Sai. Vì A sai.
- D. Không câu nào đúng: Sai. Vì B đúng.
Vậy, đáp án đúng là B.