Cho biết kết quả khi chạy đoạn chương trình sau:
int main() { char s[] = "0123456789"; short* p = (short*)s; *(p + 2) = 'A'; cout << s; }
Đáp án lựa chọn:
A. 0123456789
B. 01234567A
C. 012345A
D. 0123A
Giải thích:
s
là mảngchar
chứa"0123456789"
p
làshort*
→ ép kiểu mảngchar
thành mảng cácshort
.Mỗi
short
chiếm 2 byte.(p + 2)
→ dịch tới phần tửshort
thứ 2.Gán
*(p + 2) = 'A'
:'A'
có mã ASCII là65
Việc gán vào
short
sẽ ghi 2 bytes vào mảngs
, làm thay đổi các ký tự tương ứng.
Tùy vào kiến trúc máy (endianess), nhưng đa số PC phổ biến dùng little-endian: byte thấp lưu trước.
Với little-endian:
Byte 4 và 5 (ứng với
'4'
và'5'
) sẽ bị thay đổi.
Kết quả sau khi thay đổi:
"0123A6789"
Vậy đáp án đúng là: D. 0123A