Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

การเข้าถึงอาร์เรย์แบบไม่ธรรมดาใน C++

วิธีมาตรฐาน vs วิธีพิเศษ

ปกติเราเข้าถึงอาร์เรย์ด้วย arr[index] แต่ C++ อนุญาตให้เขียนเป็น index[arr] ได้เช่นกัน!

ตัวอย่าง

#include <iostream>
using namespace std;

int main() {
    int arr[2] = {32, 65};
    
    // วิธีมาตรฐาน
    cout << "Standard: arr[0] = " << arr[0] << ", arr[1] = " << arr[1] << endl;
    
    // วิธี "ไม่ธรรมดา" - แต่ทำงานได้จริง!
    cout << "Unusual: 0[arr] = " << 0[arr] << ", 1[arr] = " << 1[arr] << endl;
    
    return 0;
}

ผลลัพธ์

Standard: arr[0] = 32, arr[1] = 65
Unusual: 0[arr] = 32, 1[arr] = 65

ทำไมถึงทำงานได้?

ใน C/C++ นิพจน์ arr[index] ถูกแปลว่า *(arr + index)

  • arr[0] → *(arr + 0) → ชี้ที่ตำแหน่งแรก
  • 0[arr] → *(0 + arr) → ชี้ที่ตำแหน่งเดียวกัน! (การบวกสลับที่ได้)

ทั้งคู่ชี้ไปที่ address เดียวกัน

ข้อควรระวัง

  • เป็นเพียง syntactic sugar ไม่ควรใช้ในโค้ดจริง (ลด readability)
  • ทำงานได้กับ built-in array และ pointer เท่านั้น
  • ไม่ทำงานกับ std::array, std::vector (เพราะ operator[] เป็น member function)

สรุป

คุณสมบัตินี้มาจากการที่ array indexing ถูกนิยามใน терมของ pointer arithmetic ไม่ใช่ฟีเจอร์ที่ออกแบบมาเพื่อใช้งานจริง แต่มักปรากฏในแบบทดสอบความรู้ C++ หรือ obfuscated code contests