มีสองแนวคิดแยกกันที่นี่ -
- ขอบเขต ซึ่งกำหนดตำแหน่งที่สามารถเข้าถึงชื่อได้ - ทั่วโลกและในพื้นที่
- ระยะเวลาการจัดเก็บ ซึ่งกำหนดเมื่อตัวแปรถูกสร้างขึ้นและทำลาย - คงที่และอัตโนมัติ
ขอบเขต
ตัวแปรโลคัลสามารถใช้ได้โดยคำสั่งที่อยู่ภายในฟังก์ชันหรือบล็อกของโค้ดเท่านั้น ตัวแปรท้องถิ่นไม่เป็นที่รู้จักในการทำงานด้วยตัวเอง
ตัวอย่าง
#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 ++ คำหลักอัตโนมัติไม่ได้หมายถึงระยะเวลาการจัดเก็บอัตโนมัติอีกต่อไป ตอนนี้หมายถึงประเภทอัตโนมัติ อนุมานจากตัวเริ่มต้นของตัวแปร