ตัวแปรแบบคงที่คือตัวแปรที่ยังคงอยู่ในหน่วยความจำในขณะที่โปรแกรมกำลังทำงาน กล่าวคือ อายุการใช้งานของตัวแปรคือตลอดระยะเวลาที่โปรแกรมทำงาน ซึ่งแตกต่างจากตัวแปรอัตโนมัติเนื่องจากจะคงอยู่ในหน่วยความจำเฉพาะเมื่อฟังก์ชันกำลังทำงานและจะถูกทำลายเมื่อฟังก์ชันสิ้นสุด
ตัวแปรสแตติกถูกเก็บไว้ในส่วนข้อมูลของหน่วยความจำ ส่วนข้อมูลเป็นส่วนหนึ่งของพื้นที่ที่อยู่เสมือนของโปรแกรม
ตัวแปรสแตติกทั้งหมดที่ไม่มีการเริ่มต้นอย่างชัดเจนหรือถูกเตรียมข้อมูลเบื้องต้นให้เป็นศูนย์จะถูกเก็บไว้ในเซ็กเมนต์ข้อมูลที่ยังไม่ได้กำหนดค่าเริ่มต้น (หรือที่เรียกว่าเซ็กเมนต์ BSS) เมื่อเทียบกับสิ่งนี้ ตัวแปรสแตติกที่เตรียมใช้งานจะถูกจัดเก็บไว้ในส่วนข้อมูลที่เริ่มต้น
ยกตัวอย่างดังนี้ −
static int x = 5; static int y; The static variable x is stored in the initialized data segment and the static variable y is stored in the BSS segment.
โปรแกรมที่แสดงตัวแปรคงที่ในภาษา C มีดังต่อไปนี้ -
ตัวอย่าง
#include<stdio.h> int func(){ static int i = 4 ; i++; return i; } int main(){ printf("%d\n", func()); printf("%d\n", func()); printf("%d\n", func()); printf("%d\n", func()); printf("%d\n", func()); printf("%d\n", func()); return 0; }
ผลลัพธ์ของโปรแกรมข้างต้นเป็นดังนี้ −
5 6 7 8 9 10
ตอนนี้เรามาทำความเข้าใจโปรแกรมข้างต้นกัน
ในฟังก์ชัน func() i เป็นตัวแปรสแตติกที่กำหนดค่าเริ่มต้นเป็น 4 ดังนั้นมันจึงถูกจัดเก็บไว้ในกลุ่มข้อมูลที่เริ่มต้น จากนั้น i จะเพิ่มขึ้นและค่าของมันจะถูกส่งกลับ ข้อมูลโค้ดที่แสดงสิ่งนี้มีดังนี้ -
int func(){ static int i = 4 ; i++; return i; }
ในฟังก์ชัน main() ฟังก์ชัน func() จะถูกเรียก 6 ครั้ง และคืนค่า i ที่พิมพ์ออกมา เนื่องจาก i เป็นตัวแปรสแตติก มันจึงยังคงอยู่ในหน่วยความจำในขณะที่โปรแกรมกำลังทำงานและให้ค่าที่สม่ำเสมอ ข้อมูลโค้ดที่แสดงสิ่งนี้มีดังนี้ -
printf("%d\n", func()); printf("%d\n", func()); printf("%d\n", func()); printf("%d\n", func()); printf("%d\n", func()); printf("%d\n", func());