چه تفاوتی بین متغیرهای محلی و سراسری وجود دارد

خلاصه
1404/05/22

متغیرهای محلی و سراسری دو نوع اصلی متغیر در برنامه‌نویسی هستند که از نظر **محدوده دسترسی (Scope)** و **طول عمر (Lifetime)** با هم تفاوت دارند: **1. متغیرهای محلی (Local Variab

چه تفاوتی بین متغیرهای محلی و سراسری وجود دارد

متغیرهای محلی و سراسری دو نوع اصلی متغیر در برنامه‌نویسی هستند که از نظر **محدوده دسترسی (Scope)** و **طول عمر (Lifetime)** با هم تفاوت دارند:

**1. متغیرهای محلی (Local Variables):**

* **محدوده دسترسی:**
* متغیرهای محلی فقط در داخل بلوکی که در آن تعریف شده‌اند قابل دسترسی هستند. این بلوک می‌تواند یک تابع، یک حلقه (for یا while)، یک شرط (if یا else) و یا هر بلوک کد محصور شده با {} باشد.
* به عبارت دیگر، متغیر محلی فقط در همان تابع یا بلوکی که در آن تعریف شده "زندگی" می‌کند و خارج از آن وجود ندارد.

* **طول عمر:**
* متغیرهای محلی زمانی ایجاد می‌شوند که بلوک مربوطه (مثلاً تابع) اجرا می‌شود و زمانی که اجرای بلوک به پایان می‌رسد، از بین می‌روند.
* مقدار آن‌ها بین فراخوانی‌های مختلف یک تابع (یا اجرای بلوک) حفظ نمی‌شود. هر بار که بلوک اجرا می‌شود، یک متغیر محلی جدید ایجاد می‌شود.

* **مثال (C++):**

```c++
#include

void myFunction() {
int x = 10; // x یک متغیر محلی است
std::cout << "Inside myFunction: x = " << x << std::endl;
}

int main() {
myFunction();
// std::cout << x; // خطا! x در اینجا قابل دسترسی نیست
return 0;
}
```

در این مثال، `x` یک متغیر محلی است که در داخل تابع `myFunction` تعریف شده است. فقط در داخل این تابع قابل دسترسی است و سعی در دسترسی به آن در تابع `main` منجر به خطا می‌شود.

**2. متغیرهای سراسری (Global Variables):**

* **محدوده دسترسی:**
* متغیرهای سراسری در خارج از تمام توابع و بلوک‌ها تعریف می‌شوند.
* آن‌ها از هر نقطه‌ای در برنامه، از جمله داخل توابع و بلوک‌ها، قابل دسترسی هستند.

* **طول عمر:**
* متغیرهای سراسری در ابتدای اجرای برنامه ایجاد می‌شوند و تا پایان اجرای برنامه زنده می‌مانند.
* مقدار آن‌ها در طول اجرای برنامه حفظ می‌شود و می‌تواند توسط توابع مختلف تغییر کند.

* **مثال (C++):**

```c++
#include

int globalVar = 20; // globalVar یک متغیر سراسری است

void myFunction() {
globalVar = 30; // تغییر مقدار متغیر سراسری
std::cout << "Inside myFunction: globalVar = " << globalVar << std::endl;
}

int main() {
std::cout << "Before myFunction: globalVar = " << globalVar << std::endl;
myFunction();
std::cout << "After myFunction: globalVar = " << globalVar << std::endl;
return 0;
}
```

در این مثال، `globalVar` یک متغیر سراسری است که در خارج از هر تابعی تعریف شده است. هم در تابع `main` و هم در تابع `myFunction` قابل دسترسی است و مقدار آن در تابع `myFunction` تغییر می‌کند.

**خلاصه تفاوت‌ها:**

| ویژگی | متغیر محلی | متغیر سراسری |
| --------------- | ----------------------------------------- | --------------------------------------------- |
| محدوده دسترسی | محدود به بلو