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

ตัวแปร 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. กำหนด enum
  2. ค่า enum และช่วง
  3. ตัวแปร const
  4. ค่าคงที่ #define
← กลับไปที่ C Academy