1. const ในภาษา C คืออะไร?
เมื่อเขียนโปรแกรมด้วยภาษา C คำสำคัญ const
จะช่วยป้องกันไม่ให้ค่าของตัวแปรถูกเปลี่ยนโดยไม่ตั้งใจ const
ใช้เพื่อประกาศว่า “ค่าของตัวแปรนี้ห้ามเปลี่ยนแปลง!” เมื่อกำหนดค่าให้ตัวแปรแล้ว จะไม่สามารถเปลี่ยนค่าได้อีกต่อไป
ตัวอย่างเช่น ลองดูโค้ดด้านล่างนี้:
const int x = 10;
x = 20; // เกิดข้อผิดพลาด!
เมื่อใช้ const
แบบนี้ จะทำให้ค่าของ x
คงที่ ไม่สามารถเปลี่ยนแปลงได้โดยไม่ได้ตั้งใจ การหยุดไม่ให้ตัวแปร “อยากเป็นอิสระ!” จะช่วยให้โปรแกรมมีเสถียรภาพมากขึ้น
2. ทำไมควรใช้ const?
2.1 เพิ่มความปลอดภัยให้โค้ด
การใช้ const
จะช่วยลดความเสี่ยงที่ข้อมูลสำคัญหรือค่าคงที่ในโปรแกรมจะถูกเปลี่ยนโดยไม่ได้ตั้งใจ หากเปลี่ยนแปลงค่าดังกล่าวอาจทำให้โปรแกรมไม่เสถียร แต่การใช้ const
จะช่วยป้องกันสิ่งนี้
2.2 ได้ประโยชน์จากการเพิ่มประสิทธิภาพของคอมไพเลอร์
ด้วย const
คอมไพเลอร์จะรู้ว่าค่านี้ไม่มีการเปลี่ยนแปลง จึงสามารถปรับประสิทธิภาพการทำงานได้ดีขึ้น โดยเฉพาะเมื่อใช้ตัวแปร const
ซ้ำหลายครั้ง จะช่วยให้โปรแกรมทำงานเร็วขึ้น
2.3 อ่านง่ายและเหมาะกับการทำงานเป็นทีม
การใช้ const
เป็นแนวทางปฏิบัติที่ดีสำหรับการเขียนโค้ดที่อ่านง่าย โดยเฉพาะในการพัฒนาแบบทีม จะช่วยให้ทีมงานเข้าใจได้ชัดเจนว่า “ค่านี้เปลี่ยนไม่ได้” ป้องกันความผิดพลาดจากการเปลี่ยนแปลงค่าตัวแปรโดยไม่ได้ตั้งใจ

3. ทำความเข้าใจความสัมพันธ์ระหว่าง Pointer และ const
ความสัมพันธ์ระหว่าง Pointer และ const
เป็นจุดที่สร้างความสับสนสำหรับผู้ที่เรียนภาษา C ตำแหน่งที่วาง const
จะมีผลต่อพฤติกรรมของ Pointer และค่าที่ชี้ไป
const int *p;
ในกรณีนี้ ค่าที่p
ชี้ไป (*p
) ไม่สามารถเปลี่ยนแปลงได้ แต่ตัว Pointerp
ยังเปลี่ยนไปชี้ตำแหน่งอื่นได้int *const p;
ในกรณีนี้ ตัว Pointerp
ไม่สามารถเปลี่ยนไปชี้ตำแหน่งอื่นได้ แต่ค่าที่*p
ชี้สามารถเปลี่ยนได้const int *const p;
ในกรณีนี้ ทั้ง Pointerp
และค่าที่ชี้ไป*p
ไม่สามารถเปลี่ยนแปลงได้เลย เป็น “คงที่แน่นอน”
Pointer มีพลังมาก แต่หากใช้ผิดอาจเกิดข้อผิดพลาด ควรใส่ใจตำแหน่งการวาง const
เสมอ
4. ตัวอย่างการใช้ const ในทางปฏิบัติ
4.1 ใช้ const กับอาร์กิวเมนต์ของฟังก์ชัน
เมื่อส่ง Array หรือ Pointer ให้กับฟังก์ชัน หากไม่ต้องการให้ข้อมูลถูกเปลี่ยนในฟังก์ชัน ให้ใช้ const
ตัวอย่างเช่น โค้ดด้านล่างนี้จะป้องกันไม่ให้เนื้อหา Array ถูกแก้ไขภายในฟังก์ชัน
void printArray(const int arr[], int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("
");
}
วิธีนี้จะช่วยให้เรียกดูข้อมูลใน Array ได้อย่างปลอดภัย
4.2 ใช้ const กับ Lookup Table
สำหรับข้อมูลที่ไม่จำเป็นต้องเปลี่ยนระหว่างรันโปรแกรม เช่น Lookup Table การใช้ const
จะเหมาะสม ตัวอย่างนี้เป็นการเก็บชื่อวันไว้เป็นข้อมูลคงที่
const char *days[] = {"Monday", "Tuesday", "Wednesday"};
ข้อมูลจะถูกใช้งานได้อย่างเสถียรและไม่เกิดการเปลี่ยนแปลงโดยไม่ได้ตั้งใจ

5. ข้อควรระวังและการใช้ const ผิดวิธี
5.1 ตัวอย่างการใช้ const ผิด
ถ้าใช้ const
ผิดอาจเกิดข้อผิดพลาดหรือพฤติกรรมไม่คาดคิด ดูตัวอย่างนี้:
void modifyArray(const int arr[], int size) {
arr[0] = 10; // คอมไพล์ไม่ผ่าน!
}
ในฟังก์ชันนี้ พยายามเปลี่ยนค่าของ Array ที่ถูกกำหนด const
ซึ่งจะทำให้เกิดข้อผิดพลาดขณะคอมไพล์ const
รับประกันว่า “เปลี่ยนไม่ได้” หากฝืนเปลี่ยนจะเกิดข้อผิดพลาด
5.2 ข้อควรระวังเมื่อใช้ const กับการ cast
สามารถใช้ const_cast
เพื่อถอด const
ออกได้ แต่เป็นวิธีที่เสี่ยงมาก อาจทำให้เกิดปัญหาหรือผลลัพธ์ที่ไม่สามารถคาดเดาได้ตามระบบปฏิบัติการต่าง ๆ จึงควรหลีกเลี่ยง เพื่อความปลอดภัยควรเคารพจุดประสงค์ของ const
เสมอ
6. สรุป
const
ในภาษา C เป็นเครื่องมือสำคัญที่ช่วยเพิ่มความปลอดภัยให้กับโค้ดและเพิ่มประสิทธิภาพการทำงาน หากใช้ const
อย่างเหมาะสมกับตัวแปรและ Pointer จะช่วยให้โปรแกรมเสถียรและลดข้อผิดพลาดได้
ครั้งต่อไปที่เขียนโปรแกรม ลองใช้ const
ให้มากขึ้น จะพบว่ามีหลายจุดที่สามารถใช้เพื่อทำให้โค้ดของคุณแข็งแกร่งขึ้นได้!