JavaScript is required

What is output of code? #include int main() { int a = 320; char *ptr; ptr = (char*)&a printf("%d ", *ptr); return 0; }

A.

320

B.

64

C.

Complier Error

Trả lời:

Đáp án đúng: B


Đoạn code này kiểm tra sự hiểu biết về cách các kiểu dữ liệu khác nhau được lưu trữ trong bộ nhớ và cách con trỏ hoạt động. Ở đây, biến `a` là một số nguyên (int) có giá trị 320. Trong hệ thập phân, 320 có thể biểu diễn trong hệ nhị phân là 00000001 01000000. Khi đó, đoạn code `ptr = (char*)&a;` gán địa chỉ của biến `a` (kiểu int) cho con trỏ `ptr` (kiểu char). Điều này có nghĩa là `ptr` bây giờ trỏ đến byte đầu tiên trong biểu diễn bộ nhớ của `a`. Vì kiểu `char` chỉ chiếm 1 byte, `*ptr` sẽ chỉ lấy giá trị của byte đầu tiên mà `a` chiếm giữ trong bộ nhớ. Với giá trị 320 (00000001 01000000 trong hệ nhị phân), byte đầu tiên (tức là byte có địa chỉ thấp nhất, tùy thuộc vào kiến trúc little-endian hoặc big-endian) sẽ chứa giá trị 64 (01000000). Do đó, khi in giá trị của `*ptr` bằng `%d`, nó sẽ in ra 64. Vì vậy, đáp án chính xác là 64.

Câu hỏi liên quan