Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ความแตกต่างระหว่าง static, auto, global และ local variable ใน C++

มี 2 แนวคิดที่แยกจากกันที่นี่ -

  • ขอบเขต (scope) ซึ่งกำหนดว่าชื่อสามารถเข้าถึงได้ที่ไหน - global และ local
  • ระยะเวลาการจัดเก็บ (storage duration) ซึ่งกำหนดว่าตัวแปรถูกสร้างและทำลายเมื่อไหร่ - static และ auto

ขอบเขต (Scope)

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

ตัวอย่าง

#include <iostream>
using namespace std;
int main () {
    // ประกาศตัวแปรท้องถิ่น:
    int a, b;
    int c;
    // เริ่มต้นค่า
    a = 10;
    b = 20;
    c = a + b;
    cout << c;
    return 0;
}

ผลลัพธ์ -

30

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

ตัวอย่าง

#include <iostream>
using namespace std;
// ประกาศตัวแปรกลาง:
int g;
int main () {
    // ประกาศตัวแปรท้องถิ่น:
    int a, b;
    // เริ่มต้นค่า
    a = 10;
    b = 20;
    g = a + b;
    cout << g;
    return 0;
}

ผลลัพธ์ -

30

ระยะเวลาการจัดเก็บ (Storage duration)

ตัวแปรอัตโนมัติ (Automatic variables) คือตัวแปรท้องถิ่นที่อายุสิ้นสุดลงเมื่อการทำงานออกจากขอบเขตของมัน และถูกสร้างใหม่เมื่อเข้าขอบเขตอีกครั้ง

ตัวอย่าง

for (int i = 0; i < 5; ++i) {
    int n = 0;
    printf("%d ", ++n); // พิมพ์ 1 1 1 1 1 - ค่าก่อนหน้าสูญหาย
}

ตัวแปร static มีอายุจนจบโปรแกรม หากเป็นตัวแปรท้องถิ่น ค่าของมันจะคงอยู่เมื่อการทำงานออกจากขอบเขต

for (int i = 0; i < 5; ++i) {
    static int n = 0;
    printf("%d ", ++n); // พิมพ์ 1 2 3 4 5 - ค่าคงอยู่
}

โปรดทราบว่า keyword static มีความหมายอื่นๆ อีกมากนอกจาก static storage duration นอกจากนี้ใน C++ keyword auto ไม่ได้หมายถึง automatic storage duration อีกต่อไป มันหมายถึง automatic type deduction (การอนุมานชนิดอัตโนมัติ) จาก initializer ของตัวแปร