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

ตัวแปร static

ตัวแปรเฉพาะที่ที่คงอยู่

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

คีย์เวิร์ด static

ตัวแปรท้องถิ่น static จะเก็บค่าไว้ระหว่างการเรียกฟังก์ชันแต่ละครั้ง ช่วงอายุของตัวแปรครอบคลุมตลอดทั้งโปรแกรม

#include <stdio.h>
void f(void) {
    static int count = 0;
    count++;
    printf("count = %d\n", count);
}
int main(void) {
    f();
    f();
    f();
    return 0;
}

กำหนดค่าเริ่มต้นเพียงครั้งเดียว

ตัวแปร static จะถูกกำหนดค่าเริ่มต้นเฉพาะในครั้งแรกที่ฟังก์ชันทำงาน การเรียกครั้งต่อ ๆ ไปจะข้ามการกำหนดค่าเริ่มต้น

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

ค่าเริ่มต้นเป็นศูนย์

ต่างจากตัวแปร auto ตัวแปร static ที่ไม่มีค่าเริ่มต้นจะเริ่มต้นด้วยค่า 0

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

การนับจำนวนครั้งที่เรียก

การใช้งานทั่วไปคือใช้เพื่อนับว่าฟังก์ชันถูกเรียกใช้งานกี่ครั้ง

#include <stdio.h>
int nextId(void) {
    static int id = 0;
    return ++id;
}
int main(void) {
    printf("%d %d %d\n", nextId(), nextId(), nextId());
    return 0;
}

ช่วงอายุแบบ static ขอบเขตท้องถิ่น

ตัวแปรท้องถิ่นแบบ static ยังคงมีขอบเขตท้องถิ่น ฟังก์ชันเท่านั้นที่มองเห็นตัวแปรนี้ได้ แต่ค่าของมันยังคงอยู่ระหว่างการเรียกแต่ละครั้ง

#include <stdio.h>
void tick(void) {
    static int t = 0;
    t++;
    printf("tick %d\n", t);
}
int main(void) {
    tick();
    tick();
    return 0;
}

static กับ auto

เปรียบเทียบกัน: ตัวนับแบบ auto จะเริ่มใหม่ทุกครั้งที่เรียก ส่วนตัวนับแบบ static จะสะสมค่า

#include <stdio.h>
void autoCounter(void) {
    int c = 0;
    c++;
    printf("auto: %d\n", c);
}
int main(void) {
    autoCounter();
    autoCounter();
    return 0;
}

static ในขอบเขตระดับไฟล์

ในขอบเขตระดับไฟล์ static หมายถึงการเชื่อมโยงภายใน นั่นคือตัวแปรจะเป็นแบบส่วนตัวสำหรับไฟล์ต้นฉบับของมัน

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

การแคชด้วย static

ตัวแปร static สามารถแคชค่าที่คำนวณแล้ว เพื่อให้คำนวณเพียงครั้งเดียว

#include <stdio.h>
int getBase(void) {
    static int base = 0;
    if (base == 0) {
        base = 50;
        printf("computed once\n");
    }
    return base;
}
int main(void) {
    printf("%d\n", getBase());
    printf("%d\n", getBase());
    return 0;
}

การสะสมสถานะ

ตัวแปรท้องถิ่นแบบ static ช่วยให้ฟังก์ชันจดจำผลรวมที่กำลังสะสมได้โดยไม่ต้องใช้ตัวแปรส่วนกลาง

#include <stdio.h>
int addToTotal(int v) {
    static int total = 0;
    total += v;
    return total;
}
int main(void) {
    printf("%d\n", addToTotal(10));
    printf("%d\n", addToTotal(5));
    return 0;
}

ข้อควรระวัง

สถานะแบบ static ทำให้ฟังก์ชันขึ้นอยู่กับประวัติการทำงาน ซึ่งอาจทำให้ทดสอบได้ยากขึ้น โปรดใช้อย่างมีจุดประสงค์

#include <stdio.h>
int stepNumber(void) {
    static int s = 0;
    return ++s;
}
int main(void) {
    printf("step %d\n", stepNumber());
    printf("step %d\n", stepNumber());
    return 0;
}

การใช้ร่วมกับลูป

ตัวแปรท้องถิ่นแบบ static ภายในส่วนทำงานของลูปจะเก็บค่าไว้ทั้งระหว่างรอบการทำงานและระหว่างการเรียกฟังก์ชัน

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

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

ทดสอบความเข้าใจเกี่ยวกับตัวแปร static

สรุป: ตัวแปร static

คุณได้เรียนรู้เกี่ยวกับตัวแปรท้องถิ่นที่คงอยู่

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

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

บทเรียน “ตัวแปร static” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “ตัวแปร static”

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

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

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

บทเรียน “ตัวแปร static” ใช้เวลานานแค่ไหน

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

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

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

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

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