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;
Đá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;tongquatlà con trỏ kiểuvoid*, có thể trỏ đến bất kỳ kiểu dữ liệu nào.nguyenlà con trỏ kiểuint*. 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ểuvoid*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;nguyenlà con trỏ kiểuint*, do đó*nguyenlà một biến kiểuint.tongquatlà con trỏ kiểuvoid*, nên*tongquatkhô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ểuint(*nguyen). Để thực hiện phép gán này, bạn cần ép kiểutongquatvề 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;kitulà con trỏ kiểuchar*.tongquatlà con trỏ kiểuvoid*. Phép gán này hợp lệ vì bạn đang ép kiểutongquatthànhchar*trước khi gán chokitu. 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;tongquatlà con trỏ kiểuvoid*.kitulà con trỏ kiểuchar*. 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ểuvoid*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.





