JavaScript is required

Nếu có khai báo:

char *ptr;

char msg[10]

char v;

Câu nào sẽ đúng?

A.

ptr = v;

B.

ptr = msg;

C.

Cả hai câu đều đúng.

D.
Không câu nào đú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òn v 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ủa v cho ptr, 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ảng msg. Do đó, việc gán ptr = msg; là hợp lệ, vì cả hai đều là địa chỉ của kiểu char.
  • 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.

Câu hỏi liên quan