JavaScript is required

Cho các khai báo sau. Phép gán nào là không hợp lệ: void * tongquat; int * nguyen; char * kitu;

A.

tongquat=nguyen;

B.

*nguyen=*tongquat;

C.

kitu=(char)tongquat;

D.

tongquat=kitu;

Trả lời:

Đáp án đúng: B


Trong C/C++, việc gán giá trị giữa các con trỏ cần tuân thủ một số quy tắc về kiểu dữ liệu. Dưới đây là phân tích chi tiết từng lựa chọn:

  • A. tongquat = nguyen;

    tongquat là con trỏ kiểu void*, có thể trỏ đến bất kỳ kiểu dữ liệu nào. nguyen là con trỏ kiểu int*. Phép gán này hợp lệ vì một con trỏ kiểu cụ thể (int*) có thể được gán cho con trỏ kiểu void* mà không cần ép kiểu tường minh. Con trỏ void* có thể nhận giá trị từ bất kỳ con trỏ nào.

  • B. *nguyen = *tongquat;

    nguyen là con trỏ kiểu int*, do đó *nguyen là một biến kiểu int. tongquat là con trỏ kiểu void*, nên *tongquat không có kiểu dữ liệu cụ thể. Phép gán này không hợp lệ vì bạn đang cố gắng gán một giá trị không rõ kiểu (từ *tongquat) cho một biến kiểu int (*nguyen). Để thực hiện phép gán này, bạn cần ép kiểu tongquat về một kiểu con trỏ cụ thể trước khi dereference nó (ví dụ: *nguyen = *(int*)tongquat;). Nếu không ép kiểu, trình biên dịch sẽ báo lỗi.

  • C. kitu = (char*)tongquat;

    kitu là con trỏ kiểu char*. tongquat là con trỏ kiểu void*. Phép gán này hợp lệ vì bạn đang ép kiểu tongquat thành char* trước khi gán cho kitu. Việc ép kiểu tường minh cho phép trình biên dịch hiểu rõ kiểu dữ liệu mà con trỏ sẽ trỏ tới.

  • D. tongquat = kitu;

    tongquat là con trỏ kiểu void*. kitu là con trỏ kiểu char*. Phép gán này hợp lệ vì một con trỏ kiểu cụ thể (char*) có thể được gán cho con trỏ kiểu void* mà không cần ép kiểu tường minh.

Vậy, phép gán không hợp lệ là *nguyen = *tongquat; vì cần phải ép kiểu tường minh trước khi dereference con trỏ tongquat.

Câu hỏi liên quan