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

register และ const

คำแนะนำและการแก้ไขค่าไม่ได้

register และ const เป็นบทเรียน C Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C Academy มีบทเรียนทั้งหมด 4 บทเรียน

คำใบ้ register

register เสนอให้เก็บตัวแปรไว้ในรีจิสเตอร์ของ CPU เพื่อเพิ่มความเร็ว คำนี้เป็นเพียงคำใบ้เท่านั้น โดยทั่วไปคอมไพเลอร์สมัยใหม่มักไม่สนใจ

#include <stdio.h>
int main(void) {
    register int i;
    int sum = 0;
    for (i = 0; i < 5; i++)
        sum += i;
    printf("sum = %d\n", sum);
    return 0;
}

คุณไม่สามารถขอที่อยู่ของตัวแปรนี้ได้

เนื่องจากตัวแปร register อาจไม่ได้อยู่ในหน่วยความจำ คุณจึงไม่สามารถขอที่อยู่ของมันด้วย & ได้

#include <stdio.h>
int main(void) {
    register int x = 10;
    printf("x = %d\n", x);
    return 0;
}

เหตุผลที่ register พบได้น้อยในปัจจุบัน

คอมไพเลอร์ที่ปรับปรุงประสิทธิภาพจะนำตัวแปรที่ใช้งานบ่อยไปไว้ในรีจิสเตอร์อยู่แล้ว ปัจจุบันคีย์เวิร์ดนี้จึงมีความสำคัญในเชิงประวัติศาสตร์เป็นหลัก

#include <stdio.h>
int main(void) {
    int product = 1;
    for (register int i = 1; i <= 4; i++)
        product *= i;
    printf("product = %d\n", product);
    return 0;
}

ตัวระบุคุณสมบัติ const

const ทำให้ตัวแปรอ่านอย่างเดียวหลังจากกำหนดค่าเริ่มต้นแล้ว หากพยายามเปลี่ยนค่าจะเกิดข้อผิดพลาดขณะคอมไพล์

#include <stdio.h>
int main(void) {
    const int DAYS = 7;
    printf("DAYS = %d\n", DAYS);
    return 0;
}

ค่าคงที่บอกเจตนา

การใช้ const กับค่าที่ไม่ควรเปลี่ยนทำให้โค้ดชัดเจนขึ้น และช่วยป้องกันการเปลี่ยนแปลงโดยไม่ตั้งใจ

#include <stdio.h>
int main(void) {
    const double PI = 3.14159;
    double r = 2.0;
    printf("area = %.2f\n", PI * r * r);
    return 0;
}

const กับพอยน์เตอร์

const int *p หมายความว่าค่าที่พอยน์เตอร์ชี้อยู่จะเปลี่ยนผ่าน p ไม่ได้ แต่ตัวพอยน์เตอร์เองยังเปลี่ยนให้ชี้ไปที่อื่นได้

#include <stdio.h>
int main(void) {
    int x = 5;
    const int *p = &x;
    printf("*p = %d\n", *p);
    return 0;
}

พอยน์เตอร์คงที่

int * const p หมายความว่าตัวพอยน์เตอร์เปลี่ยนไม่ได้ แต่ค่าที่มันชี้อยู่ยังเปลี่ยนได้

#include <stdio.h>
int main(void) {
    int x = 5;
    int * const p = &x;
    *p = 9;
    printf("x = %d\n", x);
    return 0;
}

พารามิเตอร์ฟังก์ชันแบบ const

การระบุพารามิเตอร์เป็น const เป็นการรับรองว่าฟังก์ชันจะไม่แก้ไขพารามิเตอร์นั้น ซึ่งช่วยให้ผู้เรียกคาดการณ์พฤติกรรมได้

#include <stdio.h>
void show(const int n) {
    printf("n = %d\n", n);
}
int main(void) {
    show(42);
    return 0;
}

ไม่เปลี่ยนแปลงโดยการออกแบบ

ควรใช้ const กับค่าทุกค่าที่ไม่ควรเปลี่ยน เพราะช่วยตรวจพบข้อผิดพลาดขณะคอมไพล์

#include <stdio.h>
int main(void) {
    const int LIMIT = 100;
    int x = 90;
    if (x < LIMIT)
        printf("under limit\n");
    return 0;
}

การใช้ const ร่วมกับตัวแปรส่วนกลาง

ตัวแปรส่วนกลางแบบ const เป็นค่าคงที่ที่ใช้ร่วมกันได้อย่างปลอดภัยและพร้อมใช้งานทั่วทั้งไฟล์

#include <stdio.h>
const int VERSION = 2;
int main(void) {
    printf("VERSION = %d\n", VERSION);
    return 0;
}

การใช้ register และ const ร่วมกัน

คุณสามารถระบุตัวนับของลูปด้วยทั้งสองแบบได้ แม้ว่า const ในกรณีนี้จะหมายความว่าส่วนทำงานของลูปต้องไม่เปลี่ยนค่าตัวนับ

#include <stdio.h>
int main(void) {
    int sum = 0;
    for (int i = 0; i < 3; i++) {
        const int doubled = i * 2;
        sum += doubled;
    }
    printf("sum = %d\n", sum);
    return 0;
}

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ทดสอบความเข้าใจเกี่ยวกับ register และ const

สรุป: register และ const

คุณได้เรียนรู้ตัวระบุคุณสมบัติสองแบบ

  • register เป็นคำใบ้ให้จัดเก็บในรีจิสเตอร์ แต่โดยทั่วไปจะถูกละเลย
  • คุณไม่สามารถขอที่อยู่ของตัวแปร register ได้
  • const ทำให้ค่าเป็นแบบอ่านอย่างเดียว
  • ความคงที่ของพอยน์เตอร์มีสองรูปแบบ ได้แก่ ค่าคงที่กับพอยน์เตอร์คงที่
  • ใช้ const อย่างกว้างขวางเพื่อความปลอดภัย

คำถามที่พบบ่อย

บทเรียน “register และ const” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “register และ const” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “register และ const”

คำแนะนำและการแก้ไขค่าไม่ได้ คุณปฏิบัติ C Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน C Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “register และ const” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน C Academy นี้ได้ไหม

ได้ บทเรียน C Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. auto และขอบเขตเฉพาะที่
  2. ตัวแปร static
  3. extern และตัวแปรโกลบอล
  4. register และ const
← กลับไปที่ C Academy