0Pricing
C++ Academy · บทเรียน

การถอดค่าพอยน์เตอร์และเลขคณิตของพอยน์เตอร์

อ่านหน่วยความจำผ่านพอยน์เตอร์ และไล่ผ่านอาร์เรย์ด้วยเลขคณิตของพอยน์เตอร์

การถอดค่าพอยน์เตอร์และเลขคณิตของพอยน์เตอร์ เป็นบทเรียน C++ Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C++ Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน

การอ่านค่าผ่านพอยน์เตอร์

ตัวดำเนินการเอกภาค * ใช้อ่านค่าที่พอยน์เตอร์ชี้อยู่

int x = 42;
int* p = &x;
std::cout << *p;   // 42

การเขียนค่าผ่านพอยน์เตอร์

คุณยังสามารถใช้ *p ทางด้านซ้ายของการกำหนดค่าเพื่อเขียนค่าไปยังเป้าหมายได้

*p = 100;
std::cout << x;   // 100

ตัวดำเนินการลูกศร

สำหรับพอยน์เตอร์ไปยังโครงสร้างหรือคลาส p->member เป็นรูปย่อของ (*p).member ให้ใช้ลูกศร เพราะเป็นรูปแบบตามธรรมเนียม

struct Point { int x, y; };
Point pt{3, 4};
Point* p = &pt;
std::cout << p->x;   // 3

พื้นฐานการคำนวณเลขคณิตของพอยน์เตอร์

คุณสามารถบวกหรือลบจำนวนเต็มกับพอยน์เตอร์ได้ ผลลัพธ์จะเลื่อนไปทีละขั้นตาม ขนาดของสมาชิก ไม่ใช่ทีละไบต์

int a[5] = {10, 20, 30, 40, 50};
int* p = a;        // points to a[0]
p = p + 2;         // now points to a[2]
std::cout << *p;   // 30

การไล่ไปตามอาร์เรย์

การคำนวณเลขคณิตของพอยน์เตอร์ทำงานคล้ายกับการใช้ดัชนี a[i] และ *(a + i) ให้ผลเหมือนกันทุกประการ — และ p[i] ก็ใช้ได้กับพอยน์เตอร์ทุกชนิด

int a[] = {1, 2, 3, 4};
int* p = a;
for (int i = 0; i < 4; ++i) {
    std::cout << *(p + i) << " ";
}

ผลต่างของพอยน์เตอร์สองตัว

การลบพอยน์เตอร์สองตัวที่อยู่ในอาร์เรย์เดียวกันจะให้ระยะห่างเป็นจำนวนสมาชิก โดยมีชนิดเป็น std::ptrdiff_t

int a[5];
int* first = a;
int* last  = a + 5;
std::ptrdiff_t len = last - first;  // 5

การเปรียบเทียบพอยน์เตอร์

คุณสามารถเปรียบเทียบพอยน์เตอร์ว่ามีค่าเท่ากันด้วย == และ != และเปรียบเทียบลำดับด้วย < ได้เฉพาะเมื่อพอยน์เตอร์เหล่านั้นชี้เข้าไปในอาร์เรย์เดียวกัน

การวนซ้ำด้วยพอยน์เตอร์

การวนซ้ำแบบ C ตามรูปแบบมาตรฐานใช้พอยน์เตอร์สองตัว คือ จุดเริ่มต้นและจุดสิ้นสุด

int a[] = {1, 2, 3, 4, 5};
for (int* p = a; p != a + 5; ++p) {
    std::cout << *p << " ";
}

อนุญาตให้ชี้เลยจุดสิ้นสุด

คุณสามารถคำนวณพอยน์เตอร์ที่อยู่ถัดจากสมาชิกสุดท้ายหนึ่งตำแหน่งได้ ซึ่งเรียกว่าพอยน์เตอร์ "จุดสิ้นสุด" — แต่การถอดการอ้างอิงจะมีพฤติกรรมที่ไม่กำหนด

ข้อผิดพลาดของการคำนวณเลขคณิตของพอยน์เตอร์

ข้อผิดพลาดที่พบบ่อย:

  • เลื่อนพอยน์เตอร์เลยขอบเขตอาร์เรย์
  • ผสมชนิดของพอยน์เตอร์ (int* + char*)
  • ลืมว่าการคำนวณใช้หน่วยเป็นสมาชิก ไม่ใช่ไบต์

ควรใช้ตัววนซ้ำหรือช่วงข้อมูล

C++ สมัยใหม่สนับสนุนตัววนซ้ำและไลบรารีช่วงข้อมูลมากกว่าการคำนวณเลขคณิตของพอยน์เตอร์โดยตรง พอยน์เตอร์ยังคงสำคัญสำหรับอินเทอร์เฟซ API ของ C และโค้ดระดับล่างมาก

ตรวจสอบความเข้าใจ

หาก p เป็น int* ที่ชี้ไปยังจุดเริ่มต้นของ int ขนาด 4 ไบต์ p + 1 จะชี้ไปที่ใด

สรุปทบทวน

*p ใช้อ่านหรือเขียนค่าที่เป้าหมาย p->member ใช้เข้าถึงสมาชิกของโครงสร้าง การคำนวณเลขคณิตของพอยน์เตอร์จะเลื่อนไปทีละขั้นตามขนาดของสมาชิก ใช้อย่างระมัดระวัง — ในโค้ดสมัยใหม่ ตัววนซ้ำและช่วงข้อมูลมักเป็นทางเลือกที่ปลอดภัยกว่า

คำถามที่พบบ่อย

บทเรียน “การถอดค่าพอยน์เตอร์และเลขคณิตของพอยน์เตอร์” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การถอดค่าพอยน์เตอร์และเลขคณิตของพอยน์เตอร์” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C++ Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การถอดค่าพอยน์เตอร์และเลขคณิตของพอยน์เตอร์”

อ่านหน่วยความจำผ่านพอยน์เตอร์ และไล่ผ่านอาร์เรย์ด้วยเลขคณิตของพอยน์เตอร์ คุณปฏิบัติ C++ Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C++ Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน C++ Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “การถอดค่าพอยน์เตอร์และเลขคณิตของพอยน์เตอร์” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน C++ Academy นี้ได้ไหม

ได้ บทเรียน C++ Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. พอยน์เตอร์ดิบและตัวดำเนินการหาที่อยู่
  2. การถอดค่าพอยน์เตอร์และเลขคณิตของพอยน์เตอร์
  3. nullptr และความปลอดภัยของพอยน์เตอร์ว่าง
  4. เมื่อใดควรใช้พอยน์เตอร์หรือรีเฟอเรนซ์
← กลับไปที่ C++ Academy