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ảng char chứa "0123456789"

  • pshort* → ép kiểu mảng char thành mảng các short.

  • 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ảng s, 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''5') sẽ bị thay đổi.

  • Kết quả sau khi thay đổi: "0123A6789"

Vậy đáp án đúng là: D. 0123A

Để lại một bình luận