ตัวแปรถูกแบ่งออกเป็นตัวแปร 'ท้องถิ่น' และ 'ทั่วโลก' ซึ่งเป็นหัวข้อหลักของการสนทนาของเรา นี่คือความแตกต่างที่สำคัญระหว่างตัวแปรโลคอลและตัวแปรโกลบอลคือตัวแปรโลคัลถูกประกาศภายในบล็อกฟังก์ชันโดยที่ตัวแปรโกลบอลถูกประกาศนอกฟังก์ชันในโปรแกรม
ลองศึกษาความแตกต่างเพิ่มเติมระหว่างตัวแปรท้องถิ่นและตัวแปรโกลบอลพร้อมกับแผนภูมิเปรียบเทียบ
ตารางเปรียบเทียบ:
พื้นฐานสำหรับการเปรียบเทียบ | ตัวแปรท้องถิ่น | ตัวแปรทั่วโลก |
---|---|---|
การประกาศ | มีการประกาศตัวแปรภายในฟังก์ชัน | ตัวแปรจะถูกประกาศนอกฟังก์ชั่นใด ๆ |
ขอบเขต | ภายในฟังก์ชั่นภายในซึ่งพวกเขาจะประกาศ | ตลอดโปรแกรม |
ทางเข้า | เข้าถึงได้โดยข้อความภายในฟังก์ชันที่มีการประกาศ | เข้าถึงได้ด้วยคำสั่งใด ๆ ในโปรแกรมทั้งหมด |
ชีวิต | สร้างเมื่อบล็อกฟังก์ชั่นถูกป้อนและทำลายเมื่อออก | ยังคงมีอยู่ตลอดเวลาที่โปรแกรมของคุณกำลังทำงาน |
การเก็บรักษา | ตัวแปรโลคัลถูกเก็บไว้บนสแต็กเว้นแต่จะระบุไว้ | เก็บไว้ในตำแหน่งคงที่ตัดสินใจโดยคอมไพเลอร์ |
ความหมายของตัวแปรท้องถิ่น
ตัวแปรโลคัลถูกประกาศภายในบล็อกฟังก์ชันเสมอ ใน C ตัวแปรโลคัลถูกประกาศเมื่อเริ่มต้นบล็อกโค้ด ใน C ++ พวกเขาสามารถประกาศได้ทุกที่ในบล็อครหัสก่อนการใช้งาน ตัวแปรโลคอลสามารถเข้าถึงได้โดยคำสั่งที่เขียนภายในฟังก์ชันซึ่งประกาศตัวแปรโลคัล พวกเขามีความปลอดภัยในแง่ที่ว่าพวกเขาไม่สามารถเข้าถึงได้โดยฟังก์ชั่นอื่น ๆ ของโปรแกรมเดียวกัน
มีตัวแปรโลคัลอยู่จนกระทั่งบล็อกของฟังก์ชันอยู่ในการดำเนินการและดังนั้นจึงถูกทำลายหลังจากการดำเนินการออกจากบล็อก ตัวแปรท้องถิ่นสูญเสียเนื้อหาของพวกเขาทันทีที่การดำเนินการออกจากบล็อกที่มีการประกาศ
เหตุผลเบื้องหลังคือตัวแปรโลคัลถูกเก็บไว้บนสแต็กยกเว้นว่ามีการระบุที่เก็บข้อมูลพิเศษ สแต็คเป็นแบบไดนามิกในลักษณะและการเปลี่ยนแปลงในตำแหน่งหน่วยความจำนำไปสู่สาเหตุที่ตัวแปรท้องถิ่นไม่เก็บค่าได้ทันทีที่บล็อกของฟังก์ชั่นที่มีอยู่
บันทึก:
อย่างไรก็ตามมีวิธีการรักษาค่าของตัวแปรท้องถิ่นโดยใช้ตัวแก้ไข 'คงที่'
ความหมายของตัวแปรทั่วโลก
ตัวแปรโกลบอลถูกประกาศนอกฟังก์ชันทั้งหมดที่มีอยู่ในโปรแกรม ไม่เหมือนกับตัวแปรโลคัลตัวแปรโกลบอลสามารถเข้าถึงได้โดยฟังก์ชันใด ๆ ที่มีอยู่ในโปรแกรม ตัวแปรทั่วโลกไม่น่าเชื่อถือมากเนื่องจากค่าของมันสามารถเปลี่ยนแปลงได้โดยฟังก์ชั่นใด ๆ ที่มีอยู่ในโปรแกรม
ตัวแปรทั่วโลกยังคงมีอยู่จนกว่าโปรแกรมทั้งหมดจะถูกดำเนินการอย่างสมบูรณ์ ตัวแปรโกลบอลจะเก็บค่าไว้จนกว่าโปรแกรมจะทำงาน เหตุผลก็คือพวกเขาจะถูกเก็บไว้ในพื้นที่หน่วยความจำคงที่ตัดสินใจโดยคอมไพเลอร์
ตัวแปรทั่วโลกมีประโยชน์ในสถานการณ์ที่หลายฟังก์ชั่นเข้าถึงข้อมูลเดียวกัน การใช้ตัวแปรโกลบอลจำนวนมากอาจเป็นปัญหาเนื่องจากอาจมีการเปลี่ยนแปลงที่ไม่ต้องการกับค่าของตัวแปรโกลบอล
ความแตกต่างที่สำคัญระหว่างตัวแปรท้องถิ่นและระดับโลก
- ตัวแปรในตัวเครื่องนั้นเรียกว่า 'local' เพราะมันเป็นที่รู้จักกันเฉพาะกับข้อความที่เขียนในฟังก์ชั่นภายในซึ่งพวกมันถูกประกาศและไม่ทราบถึงฟังก์ชั่นอื่น ๆ ที่อยู่นอกฟังก์ชั่นบล็อกนั้น ในกรณีของตัวแปรทั่วโลกพวกเขาเป็นที่รู้จักกันในแต่ละฟังก์ชั่นและทุกคนอยู่ในโปรแกรม; ดังนั้นพวกเขาจะเรียกว่า 'ทั่วโลก'
- ตัวแปรโกลบอลเก็บค่าของพวกเขาไว้จนกว่าโปรแกรมจะอยู่ในช่วงการดำเนินการตามที่พวกเขาจะถูกเก็บไว้ในสถานที่คงที่ตัดสินใจโดยคอมไพเลอร์ ตัวแปรโลคัลถูกเก็บไว้บนสแต็ก ดังนั้นพวกเขาจะไม่เก็บค่าของพวกเขาในขณะที่ 'สแต็ค' เป็นแบบไดนามิกในธรรมชาติ แต่คอมไพเลอร์สามารถถูกนำไปรักษาค่าของพวกเขาโดยใช้ตัวแก้ไข 'คงที่'
- หากมีการประกาศตัวแปรโกลบอลและโลคัลด้วยชื่อเดียวกันข้อความสั่งทั้งหมดของบล็อกโค้ดที่ประกาศตัวแปรโลคัลจะอ้างถึงตัวแปรโลคัลและจะไม่มีผลกระทบกับตัวแปรโกลบอล
- ตัวแปรโลคัลถูกทำลายเมื่อการควบคุมของโปรแกรมออกจากบล็อกซึ่งประกาศตัวแปรท้องถิ่น อย่างไรก็ตามตัวแปรโกลบอลจะถูกทำลายเมื่อโปรแกรมทั้งหมดถูกยกเลิก
สรุป:
ตัวแปรท้องถิ่นและระดับโลกจำเป็นต้องใช้ทั้งสองอย่างเท่ากันในขณะที่เขียนโปรแกรม แต่การประกาศตัวแปรทั่วโลกจำนวนมากอาจเป็นปัญหาในโปรแกรมขนาดใหญ่เนื่องจากอาจทำให้เกิดการเปลี่ยนแปลงที่ไม่ต้องการกับตัวแปรทั่วโลก และมันก็ยากที่จะระบุว่าส่วนใดของโปรแกรมที่ทำการเปลี่ยนแปลงนั้น ดังนั้นหนึ่งควรหลีกเลี่ยงการประกาศตัวแปรทั่วโลกที่ไม่จำเป็น