ตัวแปร const
ทำให้ค่าอ่านได้อย่างเดียว
ตัวแปร const เป็นบทเรียน C Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C Academy มีบทเรียนทั้งหมด 4 บทเรียน
ความหมายของค่าคงที่
คำสำคัญ const บอกคอมไพเลอร์ว่าค่าของตัวแปรจะต้องไม่เปลี่ยนแปลงหลังการเริ่มต้นค่า
หากคุณพยายามแก้ไขค่าในภายหลัง การคอมไพล์จะล้มเหลว วิธีนี้ช่วยป้องกันค่าที่ควรคงที่ไว้
const int MAX_USERS = 100;การประกาศค่าคงที่
คุณต้องกำหนดค่าให้ตัวแปร const ขณะประกาศ เนื่องจากหลังจากนั้นจะไม่สามารถกำหนดค่าให้ตัวแปรดังกล่าวได้
ในที่นี้ PI จะถูกกำหนดค่าเพียงครั้งเดียว และใช้สำหรับอ่านค่าได้เหมือนตัวแปรทั่วไป
#include <stdio.h>
int main(void) {
const double PI = 3.14159;
printf("%f\n", PI);
return 0;
}การพยายามเปลี่ยนค่าคงที่
การกำหนดค่าให้ const หลังการประกาศจะทำให้เกิดข้อผิดพลาดระหว่างการคอมไพล์
บรรทัดด้านล่างจะถูกคอมไพเลอร์ปฏิเสธ ซึ่งเป็นการป้องกันที่เราต้องการพอดี
const int LIMIT = 50;
/* LIMIT = 60; <- compile error */ค่าคงที่มีชนิดข้อมูล
ต่างจากแมโครแบบดิบ ตัวแปร const มีชนิดข้อมูลจริงที่คอมไพเลอร์ตรวจสอบได้
วิธีนี้ทำให้ชนิดข้อมูลปลอดภัยยิ่งขึ้น โดยคอมไพเลอร์ทราบว่า RATE เป็น double และจะแจ้งเตือนเมื่อใช้งานไม่ถูกต้อง
#include <stdio.h>
int main(void) {
const double RATE = 0.05;
double total = 200.0 * RATE;
printf("%.2f\n", total);
return 0;
}ค่าคงที่กับตัวชี้: ข้อมูล
ความเป็นค่าคงที่ของตัวชี้มีอยู่สองรูปแบบ const int *p หมายความว่าไม่สามารถเปลี่ยนแปลงข้อมูลที่ตัวชี้ไปถึงผ่าน p ได้
คุณยังเลื่อน p ให้ชี้ไปยังตำแหน่งอื่นได้ แต่ไม่สามารถเขียนข้อมูลผ่านตัวชี้ดังกล่าว
int x = 5;
const int *p = &x;
/* *p = 9; <- error: data is const */ค่าคงที่กับตัวชี้: ตัวชี้
int *const p หมายความว่าตัวตัวชี้เองไม่สามารถกำหนดค่าใหม่ได้ แต่ยังสามารถเปลี่ยนแปลงข้อมูลได้
ให้อ่านการประกาศจากขวาไปซ้าย: "p เป็นตัวชี้ค่าคงที่ไปยัง int"
int x = 5, y = 8;
int *const p = &x;
*p = 9; /* allowed */
/* p = &y; <- error: pointer is const */การปกป้องอาร์กิวเมนต์ของฟังก์ชัน
การกำหนดพารามิเตอร์ตัวชี้เป็น const เป็นการรับรองว่าฟังก์ชันจะไม่แก้ไขข้อมูลของผู้เรียก
การทำเช่นนี้ช่วยบันทึกเจตนาไว้ชัดเจน และเปิดโอกาสให้คอมไพเลอร์ตรวจจับการเขียนข้อมูลโดยไม่ตั้งใจ
#include <stdio.h>
void show(const char *msg) {
printf("%s\n", msg);
}
int main(void) {
show("hello");
return 0;
}const ในการคำนวณ
การใช้งานที่พบได้บ่อยคือการกำหนดค่าการตั้งค่าคงที่ เช่น อัตราภาษีหรือตัวคูณการแปลง
การอ่านค่าคงที่ช่วยให้สูตรอ่านเข้าใจง่าย และเก็บค่าไว้ในจุดเดียว
#include <stdio.h>
int main(void) {
const double KM_PER_MILE = 1.609;
double miles = 10.0;
printf("%.2f km\n", miles * KM_PER_MILE);
return 0;
}Const มีตำแหน่งในหน่วยความจำ
เนื่องจาก const เป็นตัวแปรจริง จึงใช้หน่วยความจำและสามารถหาที่อยู่ของมันได้
สิ่งนี้แตกต่างจากมาโคร #define ซึ่งเป็นเพียงการแทนที่ด้วยข้อความและไม่มีที่อยู่
#include <stdio.h>
int main(void) {
const int N = 42;
const int *p = &N;
printf("%d\n", *p);
return 0;
}ขอบเขตและอายุการใช้งาน
const ใช้กฎขอบเขตเดียวกับตัวแปรทั่วไป
หากประกาศภายในฟังก์ชัน ตัวแปรนั้นจะเป็นตัวแปรเฉพาะที่ หากประกาศภายนอกฟังก์ชัน จะเป็นตัวแปรส่วนกลาง ขอบเขตลักษณะนี้เป็นข้อดีอีกประการหนึ่งเมื่อเทียบกับมาโครที่ครอบคลุมทั้งไฟล์
#include <stdio.h>
const int GLOBAL_MAX = 1000;
int main(void) {
const int local_min = 1;
printf("%d %d\n", local_min, GLOBAL_MAX);
return 0;
}const และตัวเลขมหัศจรรย์
การแทนที่ตัวเลขที่เขียนไว้โดยตรงในโค้ดด้วยค่าที่มีชื่อและเป็น const จะช่วยกำจัด “ตัวเลขมหัศจรรย์”
หากค่าดังกล่าวเปลี่ยนแปลงในภายหลัง คุณก็แก้ไขเพียงบรรทัดเดียว แทนที่จะต้องค้นหาทั่วทั้งโปรแกรม
#include <stdio.h>
int main(void) {
const int SECONDS_PER_MIN = 60;
int minutes = 5;
printf("%d seconds\n", minutes * SECONDS_PER_MIN);
return 0;
}ตรวจสอบอย่างรวดเร็ว
ตรวจสอบความเข้าใจเกี่ยวกับการทำงานของ const
สรุปทบทวน
ตัวแปร const เป็นค่าที่มีชนิดข้อมูลและอ่านได้อย่างเดียว ซึ่งคอมไพเลอร์จะป้องกันไม่ให้มีการเปลี่ยนแปลง
ตัวแปรนี้มีชนิดข้อมูล ขอบเขต และที่อยู่ แตกต่างจากมาโคร เมื่อใช้ร่วมกับตัวชี้ const สามารถใช้กับข้อมูล ตัวชี้ หรือทั้งสองอย่างได้ บทถัดไปเราจะเปรียบเทียบสิ่งนี้กับ #define
คำถามที่พบบ่อย
บทเรียน “ตัวแปร const” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ตัวแปร const” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ตัวแปร const”
ทำให้ค่าอ่านได้อย่างเดียว คุณปฏิบัติ C Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน C Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “ตัวแปร const” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน C Academy นี้ได้ไหม
ได้ บทเรียน C Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- กำหนด enum
- ค่า enum และช่วง
- ตัวแปร const
- ค่าคงที่ #define