การถอดค่าพอยน์เตอร์และเลขคณิตของพอยน์เตอร์
อ่านหน่วยความจำผ่านพอยน์เตอร์ และไล่ผ่านอาร์เรย์ด้วยเลขคณิตของพอยน์เตอร์
การถอดค่าพอยน์เตอร์และเลขคณิตของพอยน์เตอร์ เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- พอยน์เตอร์ดิบและตัวดำเนินการหาที่อยู่
- การถอดค่าพอยน์เตอร์และเลขคณิตของพอยน์เตอร์
- nullptr และความปลอดภัยของพอยน์เตอร์ว่าง
- เมื่อใดควรใช้พอยน์เตอร์หรือรีเฟอเรนซ์