มีสองแนวคิดแยกกันที่นี่ -
- ขอบเขต ซึ่งกำหนดตำแหน่งที่สามารถเข้าถึงชื่อได้ - ทั่วโลกและในพื้นที่
- ระยะเวลาการจัดเก็บ ซึ่งกำหนดเมื่อตัวแปรถูกสร้างขึ้นและทำลาย - คงที่และอัตโนมัติ
ขอบเขต
ตัวแปรโลคัลสามารถใช้ได้โดยคำสั่งที่อยู่ภายในฟังก์ชันหรือบล็อกของโค้ดเท่านั้น ตัวแปรท้องถิ่นไม่เป็นที่รู้จักในการทำงานด้วยตัวเอง
ตัวอย่าง
#include <iostream>
using namespace std;
int main () {
// Local variable declaration:
int a, b;
int c;
// actual initialization
a = 10;
b = 20;
c = a + b;
cout << c;
return 0;
}
สิ่งนี้จะให้ผลลัพธ์ -
ผลลัพธ์
30
ตัวแปรโกลบอลถูกกำหนดไว้นอกฟังก์ชันทั้งหมด มักจะอยู่ด้านบนของโปรแกรม ตัวแปรทั่วโลกจะคงคุณค่าไว้ตลอดอายุของโปรแกรมของคุณ ฟังก์ชันใดก็ได้เข้าถึงตัวแปรส่วนกลางได้
ตัวอย่าง
#include <iostream>
using namespace std;
// Global variable declaration:
int g;
int main () {
// Local variable declaration:
int a, b;
// actual initialization
a = 10;
b = 20;
g = a + b;
cout << g;
return 0;
}
สิ่งนี้จะให้ผลลัพธ์ -
ผลลัพธ์
30
ระยะเวลาการจัดเก็บ
ตัวแปรอัตโนมัติคือตัวแปรในเครื่องซึ่งอายุการใช้งานจะสิ้นสุดลงเมื่อการดำเนินการออกจากขอบเขต และสร้างขึ้นใหม่เมื่อป้อนขอบเขตอีกครั้ง
ตัวอย่าง
for (int i =0 0; i < 5; ++i) {
int n = 0;
printf("%d ", ++n); // prints 1 1 1 1 1 - the previous value is lost
}
ตัวแปรสแตติกมีอายุการใช้งานยาวนานจนถึงสิ้นสุดโปรแกรม หากเป็นตัวแปรโลคัล ค่าจะยังคงมีอยู่เมื่อการดำเนินการออกจากขอบเขต
for (int i = 0; i < 5; ++i) {
static int n = 0;
printf("%d ", ++n); // prints 1 2 3 4 5 - the value persists
}
โปรดทราบว่าคีย์เวิร์ดแบบสแตติกมีความหมายหลากหลายนอกเหนือจากระยะเวลาการจัดเก็บแบบสแตติก นอกจากนี้ ใน C ++ คำหลักอัตโนมัติไม่ได้หมายถึงระยะเวลาการจัดเก็บอัตโนมัติอีกต่อไป ตอนนี้หมายถึงประเภทอัตโนมัติ อนุมานจากตัวเริ่มต้นของตัวแปร