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