บทที่ 10 pointer
จบบทนี้ น้องจะรู้ว่าตัวแปรทุกตัวมีที่อยู่ในหน่วยความจำ และใช้ที่อยู่นั้นทำสิ่งที่บทก่อนๆ ทำไม่ได้ คือเขียนฟังก์ชันที่แก้ตัวแปรของคนเรียกได้ เช่น swap ที่สลับได้จริง ส่งผลกลับจากฟังก์ชันได้หลายค่า เดินบนอาเรย์และสตริงด้วย pointer ตัดสตริงหรือลบตัวอักษรในอาเรย์เดิมโดยไม่ต้องคัดลอก และจองอาเรย์ตามขนาดที่ข้อมูลเข้าบอกระหว่างรัน รวมถึงตารางที่แต่ละแถวยาวไม่เท่ากัน ใช้กับโจทย์ที่สั่งสลับข้อมูลตามคำสั่ง แยกข้อความเป็นท่อน และโจทย์ที่มีข้อมูลหลายชุดขนาดต่างกัน บทนี้ยังเฉลยเรื่องที่ค้างมาตั้งแต่บทที่ 1 ว่าทำไม scanf ต้องมี & และเป็นฐานของ struct ในบทที่ 11 กับ linked list ในบทที่ 14
ในบทนี้
| หน้า | ได้อะไร |
|---|---|
| 10.1 ที่อยู่และ pointer | ที่อยู่ในหน่วยความจำ & กับ * พิมพ์ที่อยู่ด้วย %p ชนิดของ pointer NULL และ pointer ที่ยังไม่ได้ชี้ |
| 10.2 ส่งที่อยู่ให้ฟังก์ชัน | swap ที่สลับได้จริง ส่งผลกลับหลายค่า ทำไม scanf ต้องมี & และห้ามคืนที่อยู่ของตัวแปรในฟังก์ชัน |
| 10.3 pointer กับอาเรย์ | ชื่ออาเรย์คือที่อยู่ a[i] กับ *(a + i) บวกลบ pointer ส่งบางช่วงของอาเรย์ให้ฟังก์ชัน และ pointer สองตัวเดินเข้าหากัน |
| 10.4 สตริงกับ char * | %s กับที่อยู่ ฟังก์ชันที่คืน char * ตัดสตริงด้วย '\0' ลบตัวอักษรในอาเรย์เดิม และข้อความที่แก้ไม่ได้ |
| 10.5 จองหน่วยความจำด้วย malloc | malloc calloc free ตารางที่แต่ละแถวยาวไม่เท่ากัน pointer ชี้ pointer และหน่วยความจำรั่ว |