ตัวแปรแต่ละตัวใน C++ มีชนิดเฉพาะ ซึ่งกำหนดขนาดและการจัดวางหน่วยความจำของตัวแปร; ช่วงของค่าที่สามารถจัดเก็บได้ในหน่วยความจำนั้น; และชุดของออปอเรชันที่สามารถนำไปใช้กับตัวแปรได้ เราประกาศตัวแปรโดยใช้สัญกรณ์ -
type variableName;
ชนิด (type) อาจเป็น primitive (int, bool, float, char, ฯลฯ), enumerated type, pointer ไปยังชนิดอื่น หรือชนิดที่ซับซ้อนมากกว่าที่กำหนดโดยโครงสร้างข้อมูล (data structure) หรือคลาส
ขอบเขตของตัวแปร (Variable Scope)
ขอบเขต (scope) คือบริเวณของโปรแกรม และคร่าวๆ ไปมี 3 สถานที่ที่ตัวแปรสามารถประกาศได้ -
- ภายในฟังก์ชันหรือบล็อก เรียกว่า ตัวแปรท้องถิ่น (local variables)
- ในการกำหนดพารามิเตอร์ของฟังก์ชัน เรียกว่า พารามิเตอร์ทางการ (formal parameters)
- นอกฟังก์ชันทั้งหมด เรียกว่า ตัวแปรกลาง (global variables)
ตัวแปรท้องถิ่นสามารถใช้ได้เฉพาะคำสั่งที่อยู่ภายในฟังก์ชันหรือบล็อกโค้ดนั้น ตัวแปรท้องถิ่นไม่เป็นที่รู้จักของฟังก์ชันอื่นๆ เอง
ตัวอย่าง
#include <iostream>
using namespace std;
int main () {
// ประกาศตัวแปรท้องถิ่น:
int a, b;
int c;
// เริ่มต้นค่า
a = 10;
b = 20;
c = a + b;
cout << c;
return 0;
}
ผลลัพธ์
30
ตัวแปรกลาง (Global variables) ถูกกำหนดนอกฟังก์ชันทั้งหมด ปกติอยู่ด้านบนของโปรแกรม ตัวแปรกลางจะเก็บค่าไว้ตลอดอายุของโปรแกรม ตัวแปรกลางสามารถเข้าถึงได้จากฟังก์ชันใดก็ได้
ตัวอย่าง
#include <iostream>
using namespace std;
// ประกาศตัวแปรกลาง:
int g;
int main () {
// ประกาศตัวแปรท้องถิ่น:
int a, b;
// เริ่มต้นค่า
a = 10;
b = 20;
g = a + b;
cout << g;
return 0;
}
ผลลัพธ์
30
โปรแกรมอาจมีชื่อเดียวกันสำหรับตัวแปรท้องถิ่นและกลาง แต่ค่าของตัวแปรท้องถิ่นภายในฟังก์ชันจะมีความสำคัญกว่า (take precedence) สำหรับการเข้าถึงตัวแปรกลางที่มีชื่อเดียวกัน คุณจะต้องใช้ scope resolution operator (::)
ตัวอย่าง
#include <iostream>
using namespace std;
// ประกาศตัวแปรกลาง:
int g = 20;
int main () {
// ประกาศตัวแปรท้องถิ่น:
int g = 10;
cout << g; // ท้องถิ่น
cout << ::g; // กลาง
return 0;
}
ผลลัพธ์
10 20